AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Datei zu gross für reset(file)?

Ein Thema von mcmichael · begonnen am 19. Jul 2012 · letzter Beitrag vom 20. Jul 2012
Antwort Antwort
Benutzerbild von mcmichael
mcmichael

Registriert seit: 5. Jun 2008
Ort: Bremen
79 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

Datei zu gross für reset(file)?

  Alt 19. Jul 2012, 20:59
Delphi-Version: 5
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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

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

  Alt 19. Jul 2012, 21:27
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.000 Beiträge
 
Delphi 12 Athens
 
#3

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

  Alt 19. Jul 2012, 21:43
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.119 Beiträge
 
Delphi 12 Athens
 
#4

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

  Alt 19. Jul 2012, 22:01
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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

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

  Alt 19. Jul 2012, 23:23
Setz Filemode auf 0 und es sollte klappen.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von mcmichael
mcmichael

Registriert seit: 5. Jun 2008
Ort: Bremen
79 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

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

  Alt 20. Jul 2012, 07:20
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#7

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

  Alt 20. Jul 2012, 07:27
Eine FileStream wäre sogar die bessere Lösung
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

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

  Alt 20. Jul 2012, 11:13
Reset läd nichts in den Speicher
OK. Ich gebe mich geschlagen. Aber nur weil ihr es seid.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#9

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

  Alt 20. Jul 2012, 11:31
- 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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:11 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