Autor Beitrag
achi 3.0
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 63



BeitragVerfasst: Fr 21.12.12 11:00 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 21.12.12 11:04 
Hast du mal statt dem alten AssignFile einen TFileStream z.B. probiert?
achi 3.0 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 63



BeitragVerfasst: Fr 21.12.12 11:06 
Ne kenne das nicht. Aber ich werde jetzt mal danach Suchen und es probieren. Danke.

Moderiert von user profile iconNarses: Beiträge zusammengefasst

Wie ich gerade sehe ist Filestream was neues aber ich benutze jedoch Delphi 5. Gibt es das da überhaupt???
Andreas L.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: Fr 21.12.12 11:33 
user profile iconachi 3.0 hat folgendes geschrieben Zum zitierten Posting springen:


Wie ich gerade sehe ist Filestream was neues aber ich benutze jedoch Delphi 5. Gibt es das da überhaupt???


Einfach ausprobieren?

ausblenden 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
    // Mit u. a. fs.read kannst du auf den Dateiinhalt zugreifen
  finally
    FreeAndNil(fs);
  end;
end;


Wenn du lediglich eine Textdatei öffnen möchtest kannst du auch eine TStringList verwenden.

ausblenden 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');
    // Mit sl.Text oder sl[ZeilenIndex] auf den Inhalt zugreifen
  finally
    FreeAndNil(sl);
  end;
end;
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Fr 21.12.12 11:52 
user profile iconachi 3.0 hat folgendes geschrieben Zum zitierten Posting springen:
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: msdn.microsoft.com/e...=vs.85).aspx#maxpath

user profile iconachi 3.0 hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 63



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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 user profile iconjaenicke vermute ich aber, dass das von AssignFile nicht unterstützt wird. Müsste man in der Doku nachlesen.

_________________
We are, we were and will not be.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 63



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Fr 21.12.12 14:09 
Dann kanns aber nicht an den 260 Zeichen liegen. 8)

_________________
Gruß
Hansa