Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Datei zu gross für reset(file)? (https://www.delphipraxis.net/169443-datei-zu-gross-fuer-reset-file.html)

mcmichael 19. Jul 2012 20:59

Delphi-Version: 5

Datei zu gross für reset(file)?
 
Hallo Forum,

ich versuche (Windows 7,64 Delphi 2009) eine Datei der Größe 165MByte zu öffnen.

Beim Öffnen

Code:
Assignfile(f,Opendialog1.FileName);
  Reset(f,1);
kommt der Fehler

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt test.exe ist eine Exception der Klasse EInOutError mit der Meldung 'Dateizugriff verweigert' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------

Ist die Datei zu gross für diese Funktion?

Vielen Dank,
mcmichael

Luckie 19. Jul 2012 21:27

AW: Datei zu gross für reset(file)?
 
Reset läd, glaube ich, die gesamte Datei in den Speicher. Und wenn da nicht mehr genug Platz am Stück ist, scheint das nicht zu klappen.

Uwe Raabe 19. Jul 2012 21:43

AW: Datei zu gross für reset(file)?
 
Zitat:

Zitat von Luckie (Beitrag 1175278)
Reset läd, glaube ich, die gesamte Datei in den Speicher. Und wenn da nicht mehr genug Platz am Stück ist, scheint das nicht zu klappen.

Dann käme aber eher sowas wie EOutOfMemory.

Ich hätte noch folgende Möglichkeiten anzubieten:

- die Datei ist von einer anderen Anwendung exklusiv geöffnet.
- durch die UAC-Umleitung wird die Datei an anderer Stelle gefunden als gedacht.
- die Rechte im Verzeichnis sind so, daß man die Datei zwar findet, aber nicht lesen kann.

himitsu 19. Jul 2012 22:01

AW: Datei zu gross für reset(file)?
 
Reset läd nichts in den Speicher und schon garnicht cachen diese alten Pascal-APIs die ganze Datei einfach so, von sich aus.

Eigentlich kann man fast alles mit großen Dateien verwenden.
Append und Seek hat da schonmal so seine Problemchen und sicherheitshalber sollte man ab 2 GB eher langsam mal den Schlußstrich ziehen.

Aber 165 MB liegt noch nichtmal annähernd an der Problemgrenze.

PS: Ich hatte vor langem mal einige 64-Bit-Ersatzfunktionen für Seek und Co. hier irgendwo veröffentlicht.
Allerdings würde ich, falls möglich, eher zu Streams raten. (die direkte WinAPI kann man gerne vernachlässigen und selbst bestimmte Sonderfälle lassen sich über einen HandledStream und Dergleichen sehr praktisch abdecken)

p80286 19. Jul 2012 23:23

AW: Datei zu gross für reset(file)?
 
Setz Filemode auf 0 und es sollte klappen.

Gruß
K-H

mcmichael 20. Jul 2012 07:20

AW: Datei zu gross für reset(file)?
 
Hallo,

Danke für die Hinweise.

habe noch folgende weitere Erfahrungen gesammelt:
- eine kleine Datei (100byte) wird (ohne Veränderung des Codes) ohne Probleme eingelesen.
- Filestream lädt die 160MByte Datei auch ohne Probleme
- eine Verlegung der Datei in einen rechtemäßig unkritischen Bereich führt auch zum Fehler
- Filemode ändert nix
- kein anderes Programm hat diese Datei geöffnet

Reset lädt noch keine Datei, erst Blockread. Aber dazu kommt es ja gar nicht.
Der Fehler wird bei Reset generiert.

Ich versteh das nicht, aber Filestream kann ich ersatzweise benutzen.

Ciao,
MC

mkinzler 20. Jul 2012 07:27

AW: Datei zu gross für reset(file)?
 
Eine FileStream wäre sogar die bessere Lösung

Luckie 20. Jul 2012 11:13

AW: Datei zu gross für reset(file)?
 
Zitat:

Zitat von himitsu (Beitrag 1175281)
Reset läd nichts in den Speicher

OK. Ich gebe mich geschlagen. Aber nur weil ihr es seid.

p80286 20. Jul 2012 11:31

AW: Datei zu gross für reset(file)?
 
Zitat:

Zitat von mcmichael (Beitrag 1175300)
- kein anderes Programm hat diese Datei geöffnet

Jo, es gibt ja auch die Möglichkeit, daß das eigene Programm sich selbst auf den Füßen steht, sprich ein
Code:
CloseFile
fehlt.
Wer mit den "alten" Pascal-Routinen arbeiten will, muß da schon etwas Diziplin mitbringen.

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:29 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz