FileCreate
FileCreate
Hallo,
ich habe folgendes Problem: Ich habe ein Verzeichnis mit Bildern. Wird das Programm ausgeführt, werden zu den Bildern entsprechene Textdateien über FildeCreate generiert, sofern noch keine vorhanden sind. Diese dienen dazu die Bilder "zu beschriften". Das Programm generiert die Textdateien auch, kann sie aber nicht öffnen. Ich muss zuerst das Programm schließen und wieder öffnen, dann stehen sie zur Verfügung. Kann mir einer weiterhelfen?
ich habe folgendes Problem: Ich habe ein Verzeichnis mit Bildern. Wird das Programm ausgeführt, werden zu den Bildern entsprechene Textdateien über FildeCreate generiert, sofern noch keine vorhanden sind. Diese dienen dazu die Bilder "zu beschriften". Das Programm generiert die Textdateien auch, kann sie aber nicht öffnen. Ich muss zuerst das Programm schließen und wieder öffnen, dann stehen sie zur Verfügung. Kann mir einer weiterhelfen?
-
- Beiträge: 954
- Registriert: Mi 3. Jun 2020, 07:18
- OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
- CPU-Target: Aarch64 bis Z80 ;)
- Wohnort: München
Re: FileCreate
Zeig doch mal bitte, was du genau machst. Sonst ist das schwer zu beurteilen.
FPC Compiler Entwickler
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2808
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: FileCreate
Weiterhelfen? Bestimmt, wenn du uns mal den relevanten Quellcode zeigst.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
-
- Beiträge: 2118
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: FileCreate
Das liegt daran das filecreate die Datei nichz nut erstellt sondern auch zum schreiben öffnet und dir ein handle dafür zurückgibt. Da eine datei in Windows nur von einem prozess gleichzeitig zum schreiben geöffnet sein kann, musst du wenn du die Datei anders lffnen willst (z.b. via assign oder filestream) du das handle erst schliessen musst
Re: FileCreate
Für Texte würde ich es so machen:
Code: Alles auswählen
var SL:TStringList;
begin
SL:=TStringList.Create;
SL.Text:='Schreibwas';
SL.SaveToFile('Meins.txt');
SL.Free;
end;
Re: FileCreate
Oder mache es auf die klassische Pascal-Art und lass das Windows-Gedöns mit FileCreate beiseite:
Code: Alles auswählen
var
F: TextFile;
begin
AssignFile(F, 'Meins.txt');
Rewrite(F);
WriteLn(F, 'Schreib eine Zeile...');
WriteLn(F, '... und noch eine...');
WriteLn(F, 'Jetzt reichts.');
CloseFile(F);
end;
Re: FileCreate
Die Fehlermeldung "Unable to open "Pfad...Datei" wird ausgegeben, wenn ich versuche über 'LoadFromFile' auf die Datei zuzugreifen.
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: FileCreate
Hi!
Sagt er Dir doch:
Pfad- oder/und Dateiname ist falsch angegeben.
Wurde oben schon gesagt:
Zeig mal ein bischen Code.
Bei der Angabe von Pfad- und Dateinamen wäre dann auch noch das Betriebssystem wichtig
Winni
Sagt er Dir doch:
Pfad- oder/und Dateiname ist falsch angegeben.
Wurde oben schon gesagt:
Zeig mal ein bischen Code.
Bei der Angabe von Pfad- und Dateinamen wäre dann auch noch das Betriebssystem wichtig
Winni
-
- Beiträge: 2118
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: FileCreate
Nicht unbedingt, das ist eine MöglichkeitWinni hat geschrieben: Do 16. Jun 2022, 20:29 Sagt er Dir doch:
Pfad- oder/und Dateiname ist falsch angegeben.
Code: Alles auswählen
TStringList.Create.LoadFromFile('DateiDieNichtExisitert');
Code: Alles auswählen
Unable to open file "DateiDieNichtExisitert": Das System kann die angegebene Datei nicht finden.
Code: Alles auswählen
FileCreate('DateiDieNichtExisitert');
TStringList.Create.LoadFromFile('DateiDieNichtExisitert');
Code: Alles auswählen
Unable to open file "DateiDieNichtExisitert": Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird.
Wenn man das Handle allerdings nach dem FileCreate schließt, kommt der Fehler nicht mehr:
Code: Alles auswählen
FileClose(FileCreate('DateiDieNichtExisitert'));
TStringList.Create.LoadFromFile('DateiDieNichtExisitert');
Re: FileCreate
Hallo,
ich habe den Fehler jetzt gefunden, er entsteht an ganz anderer Stelle. Es handelt sich um ein Problem welches in diesem Forum vor einiger Zeit schon einmal dikutiert wurde. Eine Filelistbox lässt sich nicht aktualisieren. Der Bug scheint also immer noch zu bestehen...
ich habe den Fehler jetzt gefunden, er entsteht an ganz anderer Stelle. Es handelt sich um ein Problem welches in diesem Forum vor einiger Zeit schon einmal dikutiert wurde. Eine Filelistbox lässt sich nicht aktualisieren. Der Bug scheint also immer noch zu bestehen...
Re: FileCreate
ich habe -> FileClose(FileCreate('DateiDieNichtExisitert')); ausprobiert, funktioniert leider nicht. Die Datei wird nicht geschlossen...
Re: FileCreate
Warum machst du's denn so kompliziert, mit FileCreate?kmesch hat geschrieben: Fr 17. Jun 2022, 11:56 ich habe -> FileClose(FileCreate('DateiDieNichtExisitert')); ausprobiert, funktioniert leider nicht. Die Datei wird nicht geschlossen...
Hat das einen besonderen Grund?
Habe dir oben ein Beispiel mit TStringList gemacht, wp_xyz mit TextFile.
Warum machst du's nicht so?
Re: FileCreate
Es funktioniert... Vielen Dank für deine Geduld !
- kralle
- Lazarusforum e. V.
- Beiträge: 1196
- Registriert: Mi 17. Mär 2010, 14:50
- OS, Lazarus, FPC: Manjaro Linux, Mint und Windows 10 ,Lazarus 3.99, FPC-Version: 3.3.1
- CPU-Target: 64Bit
- Wohnort: Bremerhaven
- Kontaktdaten:
Re: FileCreate
Moin,
Gruß Heiko
Wenn es funktioniert, dann den funktionierenden Code/-teil hier posten, dann haben alle was davon.
Gruß Heiko
OS: Manjaro Linux, Linux Mint und Windows 10
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1
Re: FileCreate
Hallo Heiko,
was da jetzt genau passiert ist weiß ich auch nicht.
anstatt
MText.Lines.LoadFromFile(DirPath + '\' + ExtractFileNameOnly(CBt.Items.Strings[0]) + '.txt');
(Inhalt der Textdatei in ein Memofeld laden zum Bearbeiten, Resultat: Textdatei kann nicht geöffnet werden)
lautet der Code jetzt
StrL := tStringList.Create;
StrL.LoadFromFile(DirPath + '\' + ExtractFileNameOnly(CBt.Items.Strings[0]) + '.txt');
MText.Lines.LoadFromFile(DirPath + '\' + ExtractFileNameOnly(CBt.Items.Strings[0]) + '.txt');
ich habe damit den Vorschlag von theo übernommen.
was da jetzt genau passiert ist weiß ich auch nicht.
anstatt
MText.Lines.LoadFromFile(DirPath + '\' + ExtractFileNameOnly(CBt.Items.Strings[0]) + '.txt');
(Inhalt der Textdatei in ein Memofeld laden zum Bearbeiten, Resultat: Textdatei kann nicht geöffnet werden)
lautet der Code jetzt
StrL := tStringList.Create;
StrL.LoadFromFile(DirPath + '\' + ExtractFileNameOnly(CBt.Items.Strings[0]) + '.txt');
MText.Lines.LoadFromFile(DirPath + '\' + ExtractFileNameOnly(CBt.Items.Strings[0]) + '.txt');
ich habe damit den Vorschlag von theo übernommen.