![]() |
Fehler bei REWRITE
Delphi-Quellcode:
Fehlermeldung: ElnOutError I/0 error 32
if fileexists('Eintrage.txt') then
begin assignfile(datei2,'Eintrage.txt'); reset(datei2); readln(datei2,hilf); if hilf <> '' then begin reset(datei2); append(datei2); writeln(datei2,edit1.text+' '+edit2.text); end else begin rewrite(datei2); <-- Hier Fehlermeldung writeln(datei2,edit1.text+' '+edit2.text); end; closefile(datei2); end else begin assignfile(datei2,'Eintrage.txt'); rewrite(datei2); writeln(datei2,edit1.text+' '+edit2.text); closefile(datei2); end; end; Folgende Variablen wurden in der Procedur deklariert:
Delphi-Quellcode:
Keine Variablen wurden global deklariert.
var
datei2: textfile; hilf: string; Die Datei existiert. Sie ist aber leer. Deshalb habe ich mit der IF-Abfrage geprüft, ob sie leer ist, da der Befehl append bei leeren Dateien nicht funktioniert (meiner Meinung nach). Nun soll mit rewrite und writeln etwas in die Datei geschrieben werden. ICH HABE AUCH DIE SUCHMASCHINE BENUTZT, habe aber nichts gefunden, was mir weiterhelfen konnte. |
Re: Fehler bei REWRITE
Hai Chrissi91,
ich habe deinen Code mal so formatiert das man die IF-ELSE die zusammen gehören auch erkennen kann ;-) Was ich nicht verstehe: Was möchtest Du denn machen? Wenn etwas in der Datei steht möchtest Du sie erzeugen und dann etwas rein schreiben. Wenn aber schon etwas in der Datei steht möchtest Du noch etwas anhängen?
Delphi-Quellcode:
Darum mag ich keine end-else in einer Zeile *g*
procedure TForm1.btn_TestClick(Sender: TObject);
var datei2: textfile; hilf: string; begin if fileexists('Eintrage.txt') then begin assignfile(datei2, 'Eintrage.txt'); reset(datei2); readln(datei2, hilf); if hilf <> '' then begin reset(datei2); append(datei2); writeln(datei2, edit1.Text + ' ' + edit2.Text); end else begin rewrite(datei2);// <-- Hier Fehlermeldung writeln(datei2, edit1.Text + ' ' + edit2.Text); end; closefile(datei2); end else begin assignfile(datei2, 'Eintrage.txt'); rewrite(datei2); writeln(datei2, edit1.Text + ' ' + edit2.Text); closefile(datei2); end; end; |
Re: Fehler bei REWRITE
Es ist ja für mein Adressverzeichnis.
Wenn die Datei nicht existiert, soll sie erstellt werden. Wenn die Datei existiert, soll etwas angehängt werden. Aber wenn die Datei leer ist, funktioniert ja der Befehl append nicht, ... |
Re: Fehler bei REWRITE
Hai Chrissi91,
vergleiche noch einmal genau deinen Code und meinen. Du wirst bemerken das bei dir wohl ein end; zu viel ist. Bei mir geht es nämlich ohne Probleme. Zitat:
|
Re: Fehler bei REWRITE
Weill dann eine Fehlermeldung kam ... ^^
Ich habe meinen Code durch deinen ersetzt und die Fehlermeldung kam trotzdem :'( |
Re: Fehler bei REWRITE
Zitat:
Mit dieser (verkürzten) Variante habe ich auch kein Problem:
Delphi-Quellcode:
procedure TForm1.btn_TestClick(Sender: TObject);
var datei2: textfile; filename : string; begin filename := ExtractFilePath(ParamStr(0)) + 'Eintrage.txt'; assignfile(datei2,filename); if not fileexists(filename) then begin rewrite(datei2); end else begin reset(datei2); end; append(datei2); writeln(datei2, edit1.Text + ' ' + edit2.Text); closefile(datei2); end; |
Re: Fehler bei REWRITE
Ich versuch es dir nochmal zu erklären ;)
Ich habe eine Index-Datei, in der die Dateinamen der Datensätze für mein Adressverzeichnis drinstehen. Wenn der Benutzer sich das Programm runterlädt, ist meistens noch keine Index-Datei dabei. Diese soll beim Erstellen des ersten Eintrages miterstellt werden. Dann soll der Dateiname in die Index-Datei getan werden. Und zwar wollte ich das so machen:
Delphi-Quellcode:
Geht das so, wenn die Datei noch nicht existiert und erstellt werden soll?
var
datei: textfile; begin assignfile(datei,'Eintrage.txt'); //Das ist die Index-Datei rewrite(datei); writeln(datei, edit1.text+' '+edit2.text+'.txt') //Daraus setzt sich der Dateiname zusammen closefile(datei); end; Existiert die Index-Datei doch schon, dann soll einfach nur eine Zeile angefügt werden:
Delphi-Quellcode:
Um das zu verbinden will ich das so machen:
var
datei2: textfile; begin assignfile(datei2,'Eintrage.txt'); //Das ist die Index-Datei append(datei2); writeln(datei2, edit1.text+' '+edit2.text+'.txt') //Daraus setzt sich der Dateiname zusammen closefile(datei2); end;
Delphi-Quellcode:
Soweit mitgekommen? ;)
var
datei, datei2: textfile; begin if fileexists('Eintrage.txt') then begin assignfile(datei2,'Eintrage.txt'); //Das ist die Index-Datei append(datei2); writeln(datei2, edit1.text+' '+edit2.text+'.txt') //Daraus setzt sich der Dateiname zusammen closefile(datei2); end else begin assignfile(datei,'Eintrage.txt'); //Das ist die Index-Datei rewrite(datei); writeln(datei, edit1.text+' '+edit2.text+'.txt') //Daraus setzt sich der Dateiname zusammen closefile(datei); end; end; Bei mir funktioniert das ganze mit Append aber nicht, wenn Eintrage.txt total leer ist. |
Re: Fehler bei REWRITE
Zitat:
Zitat:
Du sagst Du bekommst diesen Fehler "ElnOutError I/0 error 32". Hast Du schon einmal geschaut was der bedeutet? Das F1 Ding sagt Verletzung bei der gemeinsamen Benutzung Eventuell hilft Dir das ja bei deiner Fehlersuche ;-) |
Re: Fehler bei REWRITE
Dein 2. Code hat mir nicht weitergeholfen. Die Fehlermeldung hilft mir auch nicht weiter ... ;)
:coder: Dann werde ich mal weiter versuchen ... |
Re: Fehler bei REWRITE
![]() |
Re: Fehler bei REWRITE
Das Problem ist, ich weiß nicht ganz genau, was er da macht :duck:
Z.B.: Was bedeutet das: Zitat:
|
Re: Fehler bei REWRITE
Es sollte doch so sein, oder?
Delphi-Quellcode:
procedure TForm1.btn_TestClick(Sender: TObject);
var datei2: textfile; filename : string; begin filename := ExtractFilePath(ParamStr(0)) + 'Eintrage.txt'; assignfile(datei2,filename); if not fileexists(filename) then rewrite(datei2) end else reset(datei2); closefile (datei2); append(datei2); writeln(datei2, edit1.Text + ' ' + edit2.Text); closefile(datei2); end; |
Re: Fehler bei REWRITE
Dann schlag die unbekannten Befehle / Funktionen doch mal in der Hilfe nach. In Delphi brauchst du da nur den Cursor in das Wort zu stellen und F1 drücken. Also etwas Eigeninitiative schadet bestimmt nicht. Wir helfen bei Problmen hie rim Forum, sind aber kein Ersatz für die Delphi Hilfe.
@devnull:
Delphi-Quellcode:
Viel Spass beim Schreiben in eine schon geschlossenen Datei. Und ohne Auswertung der Fehler(codes) noch mehr Spass bei der Fehlersuche beim Kunden. ;)
closefile (datei2);
append(datei2); |
Re: Fehler bei REWRITE
@Luckie: Append öffnet eine Datei an letzter Stelle...
Delphi-Hilfe: Beschreibung Mit Append können Sie sicherstellen, dass eine Datei schreibgeschützt geöffnet und der Dateizeiger auf das Ende der Datei gesetzt wird. F ist eine Textdateivariable und muss zuvor mit AssignFile einer externen Datei zugeordnet werden. Ist die Datei mit dem angegebenen Namen nicht vorhanden, tritt ein Fehler auf. Wenn F bereits offen ist, wird sie geschlossen und anschließend erneut geöffnet. Die aktuelle Dateiposition wird dann auf das Dateiende gesetzt. ^^Deshalb ist es wohl auch egal, ob man ein Closefile schreibt oder nicht :roll: |
Re: Fehler bei REWRITE
Schön, aber wie ihr sehen könnt, bin ich 14 Jahre alt ;)
Die Delphi - Hilfe ist Englisch. Zwr bin ich in der 9.Klasse auf dem Gymnasium und habe jedes Halbjahr eine 1 oder 2 auf dem Zeugnis *angeb* , aber ich verstehe keine spezifischen Ausdrücke, die z.T. noch nicht einmal im Langenscheidt Lexikon stehen ;) Edit: Geht das auch?
Delphi-Quellcode:
var
datei, datei2: textfile; begin if fileexists('Eintrage.txt') then begin assignfile(datei2,'Eintrage.txt'); //Das ist die Index-Datei append(datei2); writeln(datei2, edit1.text+' '+edit2.text+'.txt') //Daraus setzt sich der Dateiname zusammen closefile(datei2); end else begin assignfile(datei,'Eintrage.txt'); //Das ist die Index-Datei rewrite(datei); writeln(datei, edit1.text+' '+edit2.text+'.txt') //Daraus setzt sich der Dateiname zusammen closefile(datei); end; end; |
Re: Fehler bei REWRITE
Zitat:
Delphi-Quellcode:
Bringt bei mir:
procedure TForm1.Button2Click(Sender: TObject);
var datei2 : textfile; filename : string; begin filename := ExtractFilePath(ParamStr(0)) + 'Eintrage.txt'; assignfile(datei2, filename); closefile(datei2); append(datei2); end; Zitat:
|
Re: Fehler bei REWRITE
Luckie, da war ursprünglich ein openfile (Rewrite / reset) zwischen AssignFile und CloseFile ...
Grüße vom marabu |
Re: Fehler bei REWRITE
Aber nicht bei devnull:
Zitat:
|
Re: Fehler bei REWRITE
Zitat:
Zitat:
Delphi-Quellcode:
In
filename := ExtractFilePath(ParamStr(0)) + 'Eintrage.txt';
![]() Wenn Du zum Beispiel dein Programm so aufrufst Programm.exe /blubb steht in PraramStr(1) ein "blubb". Eine Besonderheit ist ParamStr(0). In diesem "Parameter" seht immer der komplette Pfad und Dateiname des Programmes. Zum Beispiel "c:\Programme\Sharky\Test.exe". Die Funktion ![]() In dem Beispiel würde also
Code:
den String "c:\Programme\Sharky\" ergeben. An diesen String hänge ich jetzt einfach mit dem + den Namen der Datei.
ExtractFilePath(ParamStr(0))
Also ergibt
Code:
"c:\Programme\Sharky\Eintrag.txt".
filename := ExtractFilePath(ParamStr(0)) + 'Eintrage.txt';
Warum das ganze? Wenn Du nur den Namen der Datei angibst und keinen Pfad wird diese immer im aktuellen Verzeichniss erstellt/geöffnet. Dies ist aber nicht zwingend das Verzeichniss deiner Anwendung. Noch schlimmer: Das aktuelle Verzeichniss kann sich jederzeit (auch während dein Programm läuft) ändern!!
Code:
hier wird der Variable datei2 der Dateiname inkl. Pfad zugewiesen. Da Du dies in jedem fall brauchst reicht es dies einmal im Code zu machen.
assignfile(datei2,filename);
Delphi-Quellcode:
Ich hoffe jetzt siehst Du etwas mehr Licht im dunklen.
if not fileexists(filename) then //Wenn die Datei nicht Vorhanden ist dann:
begin rewrite(datei2); // erzeuge sie end else // ansonsten begin reset(datei2); // öffne sie nur end; append(datei2); // Zum leten "Eintrag in der Datei" springen writeln(datei2, edit1.Text + ' ' + edit2.Text); // Etwas in die Datei schreiben closefile(datei2); // die Datei schliessen. end; |
Re: Fehler bei REWRITE
Grrr ... ;) Geht dieser Code nun bei existierenen Dateien, die entweder leer oder nicht leer sind (mit Text ;)) und auch, wenn die Datei nicht existiert?
Delphi-Quellcode:
var
datei, datei2: textfile; begin if fileexists('Eintrage.txt') then begin assignfile(datei2,'Eintrage.txt'); //Das ist die Index-Datei append(datei2); writeln(datei2, edit1.text+' '+edit2.text+'.txt') //Daraus setzt sich der Dateiname zusammen closefile(datei2); end else begin assignfile(datei,'Eintrage.txt'); //Das ist die Index-Datei rewrite(datei); writeln(datei, edit1.text+' '+edit2.text+'.txt') //Daraus setzt sich der Dateiname zusammen closefile(datei); end; end; |
Re: Fehler bei REWRITE
Zitat:
|
Re: Fehler bei REWRITE
Klar geht der Code - ich würde ihn aber anders schreiben - wenn ich es nicht sogar ganz anders machen würde:
Delphi-Quellcode:
Die von dir verwendeten Dateioperationen sind veraltet und stammen aus einer Zeit, als es noch keine Netzwerke und vor allem kein Multitasking gab. Unter Windows ist es gang und gäbe, dass du beim Testen eine Datei bearbeitest, die du nebenher in einem Editor offen hältst. Da musst du dann noch jede Menge Code zur Fehlerprüfung einbauen.
procedure TDemoForm.ButtonClick(Sender: TObject);
const INDEX_FILENAME = 'Eintrage.txt'; var tf: TextFile; fileName: string; begin fileName := Edit1.Text + ' ' + Edit2.Text + '.txt'; AssignFile(tf, INDEX_FILENAME); if FileExists(INDEX_FILENAME) then Append(tf) else Rewrite(tf); WriteLn(tf, fileName); CloseFile(tf); end; Du solltest die Standardnamen deiner Komponenten auf der Form möglichst schnell abändern - Edit1 ist einfach kein guter Name... Grüße vom marabu |
Re: Fehler bei REWRITE
:gruebel: Nur mal so:
Delphi-Quellcode:
function GetIOResultErrString(Error: Integer): String;
begin case Error of 2: Result:= 'Datei nicht gefunden'; 3: Result:= 'Ungültiger Dateiname'; 5: Result:= 'Zugriff verweigert'; 32: Result:= 'Verletzung bei der gemeinsamen Benutzung / kein Filesharing'; 100: Result:= 'EOF / Fehler beim Lesen vom Datenträger'; 101: Result:= 'Festplatte voll / Fehler beim Schreiben auf Datenträger'; 102: Result:= 'Dateivariable nicht zugewiesen'; 103: Result:= 'Datei nicht geöffnet'; 104: Result:= 'Datei nicht für Leseoperationen geöffnet'; 105: Result:= 'Datei nicht für Schreiboperationen geöffnet'; 106: Result:= 'Ungültige Eingabe / Ungültiges numerisches Format'; 107: Result:= 'Datei ist bereits geöffnet'; end; end; procedure TForm.ButtonClick... var fDatei: TextFile; FileName: String; Err: Integer; begin FileName := 'Eintraege.txt'; AssignFile(fDatei, FileName); {$I-} Append(fDatei); {$I+} Err := IOResult; if Err <> 0 then begin {$I-} rewrite(fDatei); {$I+} Err := IOResult; end; if Err = 0 then begin writeln(fDatei, edit1.text + ' ' + edit2.text); CloseFile(fDatei); end else begin ShowMessage('Fehler beim öffnen oder schreiben der Datei: "' + FileName + '"' + #13#10 + '(Fehler #' + IntTostr(Err) + ' - ' + GetIOResultErrString(Err) + ')'); end; end; |
Re: Fehler bei REWRITE
Oder kürzer:
Delphi-Quellcode:
;)
ShowMessage(SysErrorMessage(GetLastError));
|
Re: Fehler bei REWRITE
Zitat:
|
Re: Fehler bei REWRITE
Delphi-Quellcode:
Hier kommt wieder die Fehlermeldung ...
assignfile(datei2,'Eintrage.txt');
if not fileexists('Eintrage.txt') then begin rewrite(datei2); end else begin reset(datei2); end; closefile (datei2); append(datei2); writeln(datei2, edit1.Text + ' ' + edit2.Text); closefile(datei2); end; |
Re: Fehler bei REWRITE
Hai Chrissi91,
wie marabu ja schon angemerkt hat sollte man mit [oh]assignfile, Append, Writeln[/oh] und Co nicht mehr arbeiten. Es gibt da viel bessere möglichkeiten. Eine wäre zum Beispiel so: *gg* Ich weiss, die sieht kompliziert aus. Ist sie aber nicht ;-)
Delphi-Quellcode:
Ansonsten solltest Du dir einmal eine
resourcestring
Env_AppData = 'APPDATA'; const INDEX_FILENAME = 'Eintrage.txt'; function AppDataDir: string; begin // Result := IncludeTrailingBackslash(GetEnvironmentVariable(ENV_APPDATA)); Result := ExtractFilePath(ParamStr(0)); // Nur zum Test !!!! end; procedure Tfrm_Main.AdressList2Index(aValue: string); var idx_List: TStream; mode : Word; tmpString: string; fileName : string; begin fileName := AppDataDir + INDEX_FILENAME; try if (FileExists(fileName)) then mode := fmOpenReadWrite else mode := fmCreate; idx_List := TFileStream.Create(fileName,mode); idx_List.Seek(0,soFromEnd); tmpstring := aValue + #10 + #13; idx_List.Write(tmpString[1], Length(tmpString)); finally idx_List.Free; end; end; procedure Tfrm_Main.btn_StoreAdressList2IndexClick(Sender: TObject); var feld1 : string; feld2 : string; begin if (dlg_Save_Adresslist.Execute) then begin feld1 := Edit1.Text; feld2 := Edit2.Text; AdressList2Index(feld1 + ' ' + feld2); end; end; ![]() |
Re: Fehler bei REWRITE
Ich versuche es noch einmal zu erkläre ;), indem ich euch mal die ganze Prozedur zeige. Ich weiß: "Einrücken" :duck: Aber das Programm ist noch von früher, wo ich sowas noch nicht gemacht habe. Die Prozedur soll folgendes machen:
Delphi-Quellcode:
- Eine Datei speichern mit den ganzen Infos aus den edit-Feldern, deren dateiname sich aus edit1.text+' '+edit2.text zusammensetzt.
procedure TForm2.BitBtn1Click(Sender: TObject);
var datei, datei2: textfile; hilf: string; begin if (combobox1.text='')or (edit1.text='') or (edit2.text='')then begin showmessage('Bitte geben Sie Anrede, Vor - und Nachnamen an, um den Datensatz speichern zu können.'); end else begin if fileexists(edit1.text+' '+edit2.text+'.txt') then begin showmessage('Achtung! Es existiert schon ein Eintrag unter diesem Namen! Abbruch ...'); form2.visible:=false; form1.Visible:=true; combobox1.Text:=''; edit1.text:=''; edit2.text:=''; edit3.text:=''; edit4.text:=''; edit5.text:=''; edit6.text:=''; edit7.text:=''; edit8.text:=''; edit9.text:=''; edit10.text:=''; memo1.Text:=''; end else begin assignfile(datei,edit1.text+' '+edit2.text+'.txt'); rewrite(datei); writeln(datei,combobox1.text); writeln(datei,edit1.text); writeln(datei,edit2.text); writeln(datei,edit3.text); writeln(datei,edit4.text); writeln(datei,edit5.text); writeln(datei,edit6.text); writeln(datei,edit7.text); writeln(datei,edit8.text); writeln(datei,edit9.text); writeln(datei,edit10.text); writeln(datei,memo1.text); closefile(datei); assignfile(datei2,'Eintrage.txt'); if not fileexists('Eintrage.txt') then begin rewrite(datei2); end else begin reset(datei2); end; closefile (datei2); append(datei2); writeln(datei2, edit1.Text + ' ' + edit2.Text); closefile(datei2); end; combobox1.Text:=''; edit1.text:=''; edit2.text:=''; edit3.text:=''; edit4.text:=''; edit5.text:=''; edit6.text:=''; edit7.text:=''; edit8.text:=''; edit9.text:=''; edit10.text:=''; memo1.Text:=''; form2.visible:=false; form1.visible:=true; end; end; - in eine datei eintrage.txt soll der dateiname rein: wenn die datei eintrage.txt nicht existiert, soll sie erstellt werden und edit1.text+' '+edit2.text soll eingetragen werden wenn die datei eintrage.txt existiert und leer ist, soll edit1.text+' '+edit2.text reingeschrieben werden wenn die datei eintrage.txt existiert und schon einige dateinamen drinstehen, soll edit1.text+' '+edit2.text hinzugefügt werden. wie mache ich das? der code funktioniert mittlerweile überhaupt nicht mehr ... :( |
Re: Fehler bei REWRITE
Mal so gefragt, welche Rechte besitzt Du auf dem Rechner und wo wird die Datei hingeschrieben. Ist die Datei irgend wo noch offen?
Welche Fehlermeldung, die selbe wie in deinem ersten Post ? //Edit: Oha, ebend stand hier noch 'ne andere Frage ;) |
Re: Fehler bei REWRITE
An meinem Rechner bin nur ich ... Es gibt nur 1 Benutzer. Die Datei ist 100%ig nicht offen vorher. Aber ich programmiere es gerade und habe es gleich geschafft. Eine Frage noch :-D:
Bei dem Befehl append: Ist das so richtig? assignfile(datei4,'Eintrage.txt'); append(datei4); writeln(datei4,edit1.Text+' '+edit2.Text); closefile(datei4); |
Re: Fehler bei REWRITE
Nachtrag:
Delphi-Quellcode:
So! Jetzt sieht das ganze schon besser aus! Trotzdem kommen immer wieder Fehlermeldungen!
procedure TForm2.BitBtn1Click(Sender: TObject);
var datei, datei2, datei3, datei4, datei5: textfile; hilf: string; begin if (combobox1.text='')or (edit1.text='') or (edit2.text='')then begin showmessage('Bitte geben Sie Anrede, Vor - und Nachnamen an, um den Datensatz speichern zu können.'); end else begin if fileexists(edit1.text+' '+edit2.text+'.txt') then begin showmessage('Achtung! Es existiert schon ein Eintrag unter diesem Namen! Abbruch ...'); form2.visible:=false; form1.Visible:=true; combobox1.Text:=''; edit1.text:=''; edit2.text:=''; edit3.text:=''; edit4.text:=''; edit5.text:=''; edit6.text:=''; edit7.text:=''; edit8.text:=''; edit9.text:=''; edit10.text:=''; memo1.Text:=''; end else begin assignfile(datei,edit1.text+' '+edit2.text+'.txt'); rewrite(datei); writeln(datei,combobox1.text); writeln(datei,edit1.text); writeln(datei,edit2.text); writeln(datei,edit3.text); writeln(datei,edit4.text); writeln(datei,edit5.text); writeln(datei,edit6.text); writeln(datei,edit7.text); writeln(datei,edit8.text); writeln(datei,edit9.text); writeln(datei,edit10.text); writeln(datei,memo1.text); closefile(datei); end; if fileexists('Eintrage.txt') then begin assignfile(datei2,'Eintrage'); reset(datei2); readln(datei2,hilf); closefile(datei2); if hilf = '' then begin deletefile('Eintrage.txt'); assignfile(datei3,'Eintrage.txt'); rewrite(datei3); writeln(datei3,edit1.Text+' '+edit2.Text); closefile(datei); end else begin assignfile(datei4,'Eintrage.txt'); append(datei4); writeln(datei4,edit1.Text+' '+edit2.Text); closefile(datei4); end; end else begin assignfile(datei5,'Eintrage.txt'); rewrite(datei5); writeln(datei5,edit1.Text+' '+edit2.Text); closefile(datei5); end; combobox1.Text:=''; edit1.text:=''; edit2.text:=''; edit3.text:=''; edit4.text:=''; edit5.text:=''; edit6.text:=''; edit7.text:=''; edit8.text:=''; edit9.text:=''; edit10.text:=''; memo1.Text:=''; form2.visible:=false; form1.visible:=true; end; end; 1. Wenn Eintrage.txt nicht existiert, wird sie ganz korrekt erstellt. So weit, so gut ... ;) 2. Wenn aber die Datei schon angelegt ist und einige Einträge drin sind, kann er die Datei nicht finden. 3. Wenn aber die Datei schon angelegt ist und noch keine Einträge drin sind, kann er die Datei nicht finden. Bei 2. und 3. steht dort "File not found". Vielleicht könnt ihr mir jetzt weiterhelfen ;) |
Re: Fehler bei REWRITE
Delphi-Quellcode:
Wo soll denn die Datei sein? Das aktuelle Verzeichnis ist nicht immer das Anwendungsverzeichnis. Ich hoffe, dass das irgendwann mal begriffen wird, zu mal es fast jedes mal erwähnt wird, wenn eine Datei ohne Pfad angegeben wird.
if fileexists('Eintrage.txt')
Das Anwendungsverzeichnis inklusive Anwendungsdateiname bekommst du mit ParamStr(0). Der Rest sollte sich durch Nachdenken ergeben. |
Re: Fehler bei REWRITE
Zitat:
Zitat:
Edit: Wäre schön, wenn du mich auf meine Fehler aufmerksam machen könntest :-D |
Re: Fehler bei REWRITE
Habe ich doch gerade: Er findet die Datei nicht, weil du nur den Dateinamen angegeben hast, aber nicht das Verzeichnis! Woher soll also dein Programm oder Windows wissen WO es die Datei findet?
|
Re: Fehler bei REWRITE
Aber ich erstelle sie doch im Verzeichnis der EXE - Datei ... Das mache ich seit 2 Jahren so ... WArum soll das jetzt aus einmal nicht mehr gehen? Aber nun gut ... Ich probier es ... ;)
|
Re: Fehler bei REWRITE
Zitat:
Zitat:
![]() :mrgreen: |
Re: Fehler bei REWRITE
Du gehst implizit davon aus, dass Programmverzeichnis und Arbeitsverzeichnis identisch sind. Das ist oftmals der Fall, aber darauf kannst Du Dich eben nicht verlassen. Das ist es, was Michael Dir zu sagen versucht.
Wenn ich eine Verknüpfung zu Deiner Anwendung anlege, kann ich dort zum Beispiel ein Arbeitsverzeichnis meiner Wahl angeben. Du bist auf der sicheren Seite, wenn Du das korrekte Verzeichnis ermittelst und dann explizit mit angibst. |
Re: Fehler bei REWRITE
Delphi-Quellcode:
Ist diese Schreibweise so korrekt?
if fileexists('C:\WINDOWS\Desktop\'+edit1.text+' '+edit2.text+'.txt') then
Dann müsste das Ganze so aussehen, oder?
Delphi-Quellcode:
procedure TForm2.BitBtn1Click(Sender: TObject);
var datei, datei2, datei3, datei4, datei5: textfile; hilf: string; begin if (combobox1.text='')or (edit1.text='') or (edit2.text='')then begin showmessage('Bitte geben Sie Anrede, Vor - und Nachnamen an, um den Datensatz speichern zu können.'); end else begin if fileexists('C:\WINDOWS\Desktop\'+edit1.text+' '+edit2.text+'.txt') then begin showmessage('Achtung! Es existiert schon ein Eintrag unter diesem Namen! Abbruch ...'); form2.visible:=false; form1.Visible:=true; combobox1.Text:=''; edit1.text:=''; edit2.text:=''; edit3.text:=''; edit4.text:=''; edit5.text:=''; edit6.text:=''; edit7.text:=''; edit8.text:=''; edit9.text:=''; edit10.text:=''; memo1.Text:=''; end else begin assignfile(datei,'C:\WINDOWS\Desktop\'+edit1.text+' '+edit2.text+'.txt'); rewrite(datei); writeln(datei,combobox1.text); writeln(datei,edit1.text); writeln(datei,edit2.text); writeln(datei,edit3.text); writeln(datei,edit4.text); writeln(datei,edit5.text); writeln(datei,edit6.text); writeln(datei,edit7.text); writeln(datei,edit8.text); writeln(datei,edit9.text); writeln(datei,edit10.text); writeln(datei,memo1.text); closefile(datei); end; if fileexists('C:\WINDOWS\Desktop\Eintrage.txt') then begin assignfile(datei2,'C:\WINDOWS\Desktop\Eintrage'); reset(datei2); readln(datei2,hilf); closefile(datei2); if hilf = '' then begin deletefile('C:\WINDOWS\Desktop\Eintrage.txt'); assignfile(datei3,'C:\WINDOWS\Desktop\Eintrage.txt'); rewrite(datei3); writeln(datei3,edit1.Text+' '+edit2.Text); closefile(datei); end else begin assignfile(datei4,'C:\WINDOWS\Desktop\Eintrage.txt'); append(datei4); writeln(datei4,edit1.Text+' '+edit2.Text); closefile(datei4); end; end else begin assignfile(datei5,'C:\WINDOWS\Desktop\Eintrage.txt'); rewrite(datei5); writeln(datei5,edit1.Text+' '+edit2.Text); closefile(datei5); end; combobox1.Text:=''; edit1.text:=''; edit2.text:=''; edit3.text:=''; edit4.text:=''; edit5.text:=''; edit6.text:=''; edit7.text:=''; edit8.text:=''; edit9.text:=''; edit10.text:=''; memo1.Text:=''; form2.visible:=false; form1.visible:=true; end; end; |
Re: Fehler bei REWRITE
Leider nein. Oder ja - aber im Endeffekt doch nein. *g*
Du kanst mit Deinem Code abfragen, ob es eine bestimmte Datei im Ordner 'c:\windows\desktop\' gibt. Das ist in sich nicht falsch - nur nicht das, was Du vermutlich möchtest. Ich kann Windows in jedem beliebigen Verzeichnis installieren und auch der Desktop ist mal hier und mal dort. Wenn Du also rausfinden willst, welches Verzeichnis auf den Desktop verweist, so musst Du nur Windows dazu befragen - und für den Code dazu die Suche der DP. ;-) Irgendwas mit "Special", "Folder" und "Location", wenn ich nicht irre. |
Re: Fehler bei REWRITE
Zitat:
Wie Luckie schon sagte: ParamStr(0) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:34 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