Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Write => I/O Error 103 (https://www.delphipraxis.net/128915-write-%3D-i-o-error-103-a.html)

Z4ppy 9. Feb 2009 12:55


Write => I/O Error 103
 
Mein Code:
Delphi-Quellcode:
var F:TextFile;
    T:string;
{...}
  AssignFile(F,'C:\datei.txt');
  Rewrite(F);
  Write(F,T); << hier gibts den I/O Error 103
  CloseFile(F);
Kann mir jemand erklären, warum das passiert?

MfG Z4ppy

himitsu 9. Feb 2009 13:08

Re: Write => I/O Error 103
 
Die 103 steht meistens für FileNotOpen ... also wird wohl die Datei nicht (richtig) geöffnet worden sein?

Z4ppy 9. Feb 2009 13:10

Re: Write => I/O Error 103
 
Ja, das weiss ich, aber wenn ich ReWrite aufrufe, sollte das doch geschehen sein, oder?

MfG Z4ppy

nahpets 9. Feb 2009 13:16

Re: Write => I/O Error 103
 
Hallo,

schau bitte mal zuerst, ob das ReWrite tatsächlich erfolgreich ist.
Delphi-Quellcode:
 
  AssignFile(F, 'C:\datei.txt');
{$I-} 
  ReWrite(F);
{$I+} 
  tmp := ioresult;
  if tmp = 0 then
  begin // erfolgreich
    Showmessage('Erfolgreich! ioresult='+inttostr(tmp));
  end
  else
  begin
    Showmessage('nicht Erfolgreich! ioresult='+inttostr(tmp));
  end;

himitsu 9. Feb 2009 13:17

Re: Write => I/O Error 103
 
kommt drauf an.

- exisitert diese Datei schon?
- hat dein Programm in diesem Verzeichnis überhaupt die nötigen Rechte, um sowas zu machen?
- ...
- siehe nahpets

Z4ppy 9. Feb 2009 13:24

Re: Write => I/O Error 103
 
Ja, ReWrite ist erfolgreich: "Erfolgreich! ioresult=0"

MfG Z4ppy

taaktaak 9. Feb 2009 13:35

Re: Write => I/O Error 103
 
In einem TextFile kannst du keine Strings, sondern nur String[] speichern
:wink:

himitsu 9. Feb 2009 13:37

Re: Write => I/O Error 103
 
Delphi-Quellcode:
AssignFile(F, 'C:\datei.txt');
{$I-}
  ReWrite(F);
  Write(F, T);
{$I+}
  tmp := ioresult;
  if tmp = 0 then
    Showmessage('Erfolgreich! ioresult=' + IntToStr(tmp))
  else
    Showmessage('nicht Erfolgreich! ioresult=' + IntToStr(tmp));
wenn das jetzt nur "nicht Erfolgreich! ioresult=103" ausgibt, dann probier es erstmal mit einem anderem Verzeichnis.

@taaktaak: wer sagt das? :gruebel:


PS: bei mir läuft dein Code (von da ganz oben) fehlerlos durch.

Z4ppy 9. Feb 2009 13:39

Re: Write => I/O Error 103
 
"nicht Erfolgreich! ioresult=103" :wall: :wall: :wall:

Ich kann mir aber nicht vorstellen, dass mein Programm in C:\ keine Datei schreiben darf...

MfG Z4ppy

Teekeks 9. Feb 2009 13:41

Re: Write => I/O Error 103
 
@taaktaak: ähhh. Und warum kann ich das dann immer machen?

himitsu 9. Feb 2009 13:43

Re: Write => I/O Error 103
 
Zitat:

Zitat von Z4ppy
Ich kann mir aber nicht vorstellen, dass mein Programm in C:\ keine Datei schreiben darf...

in Vista hat man dort (glaub ich) keinen Zugriff

taaktaak 9. Feb 2009 13:44

Re: Write => I/O Error 103
 
hab' ich mir so gedacht
:duck:

nahpets 9. Feb 2009 13:45

Re: Write => I/O Error 103
 
Hallo,

hat ein anderer Prozess die Datei noch dazwischen?
Ändere bitte zuerst mal den Dateinamen und versuche es nochmal. Bleibt das Problem, schreib' die Datei woanders hin. Je nach Betriebssystem/Konfiguration musst Du nicht zwingend nach C: schreiben dürfen. Zum Testen ist des Temp-Verzeichnis immer recht gut.
Ist das Problem mit geändertem Dateinamen weg, hat irgendein Prozess die Datei noch im Zugriff oder sie ist irgendwann man nicht richtig geschlossen worden und das Betriebssystem betrachtet sie noch als in Benutzung. Dann sollte das Problem nach 'nem Neustart aber weg sein.

mquadrat 9. Feb 2009 13:47

Re: Write => I/O Error 103
 
Zitat:

Zitat von himitsu
Zitat:

Zitat von Z4ppy
Ich kann mir aber nicht vorstellen, dass mein Programm in C:\ keine Datei schreiben darf...

in Vista hat man dort (glaub ich) keinen Zugriff

Jep, dem is so. C:\ ist tabu ab Vista.

Z4ppy 9. Feb 2009 13:47

Re: Write => I/O Error 103
 
Zitat:

Zitat von himitsu
Zitat:

Zitat von Z4ppy
Ich kann mir aber nicht vorstellen, dass mein Programm in C:\ keine Datei schreiben darf...

in Vista hat man dort (glaub ich) keinen Zugriff

In XP schon :duck:

In C:\Dokumente und Einstellungen\{Username}\Lokale Einstellungen\Temp > I/O Fehler 103 :wall::wall::wall:

MfG Z4ppy

€dit: Hab jetz mal das hier getestet:
Delphi-Quellcode:
  AssignFile(F,IncludeTrailingPathDelimiter(GetEnvironmentVariable('TMP'))+'datei.txt');
{$I-}
  ReWrite(F);
{$I+}
  tmp := ioresult;
  if tmp = 0 then
    MessageBox(0,PChar('Erfolgreich! ioresult=' + IntToStr(tmp)),'',MB_OK)
  else
    MessageBox(0,PChar('nicht Erfolgreich! ioresult=' + IntToStr(tmp)),'',MB_OK);{$I-}
{$I-}
  Write(F, T);
{$I+}
  tmp := ioresult;
  if tmp = 0 then
    MessageBox(0,PChar('Erfolgreich! ioresult=' + IntToStr(tmp)),'',MB_OK)
  else
    MessageBox(0,PChar('nicht Erfolgreich! ioresult=' + IntToStr(tmp)),'',MB_OK);
Da krieg ich zuerst "nicht Erfolgreich! ioresult=123" und dann das bekannte 103... I/O Error 123 = ERROR_INVALID_NAME, aber der Name müsste ja korrekt sein :wall::wall::wall:

himitsu 9. Feb 2009 13:56

Re: Write => I/O Error 103
 
wie klein ist denn dein String, den du da reinspeichern willst?

und unter XP kann man das da auch verbieten (wenn man will)

nahpets 9. Feb 2009 14:06

Re: Write => I/O Error 103
 
Hallo,

bitte mal ausgeben lassen:
Delphi-Quellcode:
ShowMessage(GetEnvironmentVariable('TMP')+'datei.txt');
Kommt da ein gültiger Dateiname bei raus oder fehlt eventuell zwischen GetEnvironmentVariable('TMP') und 'datei.txt' ein \?
Und wenn Tmp nach lokale Einstellungen verweist, dann muss der Dateiname in " stehen, da er Leerzeichen enthält.

Z4ppy 9. Feb 2009 14:09

Re: Write => I/O Error 103
 
@himitsu: Unterschiedlich, aber so um die 2-3 kb, also 2000-3000 Zeichen...

@nahpets: Darum hab ich ja noch IncludeTrailingPathDelimiter reingenommen, dann kommt aus was gscheites raus, in diesem Fall das hier: "C:\DOKUME~1\{User}\LOKALE~1\Temp\datei.txt" :) Is halt MS DOS Format, sollte aber trotzdem klappen

MfG Z4ppy

himitsu 9. Feb 2009 14:18

Re: Write => I/O Error 103
 
Zitat:

Zitat von Z4ppy
@himitsu: Unterschiedlich, aber so um die 2-3 kb, also 2000-3000 Zeichen...

sollte eigentlich nicht zuviel sein ... probier es doch dennoch Mal mit weniger (weniger als 128 Byte/Zeichen, denn so groß ist der interne Puffer)

Zitat:

Zitat von Z4ppy
in diesem Fall das hier: "C:\DOKUME~1\{User}\LOKALE~1\Temp\datei.txt" :) Is halt MS DOS Format, sollte aber trotzdem klappen

sieht zumindestens ordenlich aus, der Pfad und jupp, unter XP sollte ed klappen ... bei Vista bin ich mir nicht sicher, da es dort nicht alle Namen als 8.3-Version gibt, aber dann sollte der Pfad auch nicht so "kurz" von dieser Funktion ausgegeben werden :angel2:

Z4ppy 9. Feb 2009 14:25

Re: Write => I/O Error 103
 
Jetz gehts plötzlich... Ich hab nur eine Zeile eingefügt: "T:='abcabcabcabc';", dann gings... Dann hab ich diese Zeile wieder auskommentiert und jetz gehts auch :D Worans schlussendlich lag, ist mir schleierhaft...

Aber danke für eure schnelle Unterstützung :)

MfG Z4ppy


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:43 Uhr.

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