Entwickler-Ecke
Dateizugriff - Probleme mit AssignFile
achi 3.0 - Fr 21.12.12 11:00
Titel: Probleme mit AssignFile
Hallo leute,
ich bekomme beim Befehl AssignFile immer die Fehlermeldung EA-Fehler 123
Diese besagt ja das der Pfad ungültig ist aber ich vermute, dass das Problem an der länge des Pfads liegt.
Habe es mal wie folgt probiert. 8 mal einen Ordner in einen anderen Ordner gepackt und dann eine Datei daraus laden. Siehe da EA-Fehler 123. Was soll man da tun wenn die Verzeichnissturktur so ist?
Hat einer eine Idee.
Gruß
Achi
jaenicke - Fr 21.12.12 11:04
Hast du mal statt dem alten AssignFile einen TFileStream z.B. probiert?
achi 3.0 - Fr 21.12.12 11:06
Ne kenne das nicht. Aber ich werde jetzt mal danach Suchen und es probieren. Danke.
Moderiert von
Narses: Beiträge zusammengefasstWie ich gerade sehe ist Filestream was neues aber ich benutze jedoch Delphi 5. Gibt es das da überhaupt???
Andreas L. - Fr 21.12.12 11:33
achi 3.0 hat folgendes geschrieben : |
Wie ich gerade sehe ist Filestream was neues aber ich benutze jedoch Delphi 5. Gibt es das da überhaupt??? |
Einfach ausprobieren?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var fs: TFileStream; begin fs := TFileStream.Create('C:\Datei.dat', fmCreate or fmReadWrite); try finally FreeAndNil(fs); end; end; |
Wenn du lediglich eine Textdatei öffnen möchtest kannst du auch eine TStringList verwenden.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| var sl: TStrings; begin sl := TStringList.Create; try sl.LoadFromFile('C:\Datei.dat'); finally FreeAndNil(sl); end; end; |
Gerd Kayser - Fr 21.12.12 11:52
achi 3.0 hat folgendes geschrieben : |
ich vermute, dass das Problem an der länge des Pfads liegt. |
Die maximale Länge für Laufwerksbuchstaben, Ordnernamen und dem Dateinamen beträgt zusammen 260 Bytes. Siehe hierzu:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx#maxpath
achi 3.0 hat folgendes geschrieben : |
Was soll man da tun wenn die Verzeichnissturktur so ist? |
Das Anwendungsdesign überdenken, insbesondere die Ordnerstruktur. Oder halt die Ordnernamen so zusammenkürzen, daß Du unter 260 Bytes bleibst.
achi 3.0 - Fr 21.12.12 11:57
Habe gerade nachgeschaut und gesehen das der Befehle TFileStream den ich nicht kannte in der uses classes vorhanden ist.
Hierfür müsste ich jedoch viel umschreiben, da ich alles schon mit file programmiert hatte. Und bei Filestream sowie bei der Stringlist kann man kein readln usw. verwenden. Das würde also bedeuten ich muss alles anpassen.
Ist es den wirklich so das Assignfile eine begrenzte unterordner Hirarchie verlangt??
Gruß
Gausi - Fr 21.12.12 12:11
Das verlangt nicht Assignfile, sondern afaik die Windows-API. Umgehen kann man das durch verwendung der UNC-Pfadangabe (mit "\\.\" vorne dran). Aufgrund des Postings von
jaenicke vermute ich aber, dass das von AssignFile nicht unterstützt wird. Müsste man in der Doku nachlesen.
jaenicke - Fr 21.12.12 12:14
Ich glaube mich zu erinnern, dass das das nicht unterstützt, sicher bin ich mir nicht.
Mehr als 260 Zeichen geht aber ohnehin nur mit den Unicode-Funktionen der API glaube ich. Dass es um Delphi 5 geht, stand ja vorher nicht da. Deshalb wird es da wohl nicht so einfach, da das damals natürlich noch kein Unicode konnte. Da bleibt (wenn auch TFileStream usw. nicht gehen) wohl nur die API direkt zu benutzen und das jeweils mit den Unicodefunktionen und PWideChar usw.
Ach ja, und ganz wichtig:
Egal was man macht, relative Pfade können so oder so nicht länger als 260 Zeichen sein, daher schön alles absolut angeben. ;-)
achi 3.0 - Fr 21.12.12 14:06
wie soll ich denn die Ordnernamen kürzen???
Kann doch nicht jedem der das Programm nutzt sagen du darfst nur ... Ordner in Ordner haben.
Allein daß hier geht nicht:
'C:\Ordner1\Ordner2\Ordner3\Ordner4\Ordner5\Datei.txt'
hansa - Fr 21.12.12 14:09
Dann kanns aber nicht an den 260 Zeichen liegen. 8)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!