![]() |
Fehler beim überschreiben von Datei
Wenn ich meine Datei die vorher mit hFile geschlossen wurde
überschreiben will bekomme ich einen EInOut Error
Delphi-Quellcode:
Der Fehler tiritt in der Zeile Rewrite(f); auf.
myFile := SKAERO_SaveFileDialog(MainHandle, 'MidiTracker files (*.mtf*)|*.mtf*', 'mtf', 'MidiTrackerFile');
AssignFile(f, myFile); Rewrite(f); Was mache ich falsch? Geschlossen wird es korrekt.
Delphi-Quellcode:
procedure FClose(var hFile: Cardinal);
begin if hFile <> 0 then CloseHandle(hFile); hFile := 0; end; gruss |
AW: Fehler beim überschreiben von Datei
Was genau für ein Fehler? Da gibts doch immer eine Nummer, oder? :)
|
AW: Fehler beim überschreiben von Datei
Zitat:
Meinst das ? ;) Ist aber geschlossen. EDIT: Fülle den Buffer
Delphi-Quellcode:
FBuffin(MidiTrackerFile);
Delphi-Quellcode:
Dann öffne ich die Datei und setze die Zugriffsrechte
procedure FBuffin(FileName: string);
var sBuffer: string; begin if not FExist(FileName) then Exit; nErrCode := FOpen(FileName, 0, 2, myFile); if nErrCode <> 0 then exit; nReading := 0; Assignfile(ParseFile, FileName); reset(ParseFile); while not eof(ParseFile) do begin ReadLN(ParseFile, sBuffer); FSeekTo(nReading, sBuffer); inc(nReading); end; end;
Delphi-Quellcode:
FOpen(FileName, 0, 2, myFile);
Nur Lesen 0= AccessIs := GENERIC_READ; Schreibzugriff verweigern. 2= ShareIs := FILE_SHARE_READ Nach dem einlesen der datei wird alles wieder geschlossen und auf nil gesetzt
Delphi-Quellcode:
Theoretisch dürfte jetzt kein zugriff auf die Datei mehr vorhanden sein.
// MidiTrackerFile schließen
FClose(myFile); FPBuffer := nil; FToPBuffer := nil; Result := True; Aber trotzdem kann ich sie nicht überschreiben. Die Zugriffsrechte dürften dann keinen Einfluss mehr auf die Datei haben nach dem schließen. gruss |
AW: Fehler beim überschreiben von Datei
Zitat:
Warum nicht
Delphi-Quellcode:
?
CloseFile(f);
|
AW: Fehler beim überschreiben von Datei
Zitat:
gruss |
AW: Fehler beim überschreiben von Datei
Delphi-Quellcode:
Hallo Emil,
if not FExist(FileName) then Exit;
nErrCode := FOpen(FileName, 0, 2, myFile); Du öffnest die Datei immer mit FOpen schliesst sie aber nie mit z.B. mit FClose. Reset öffnet die (Text)Datei zum Lesen - das scheint ja noch in Ordnung zu sein. Da die Datei mit 0= AccessIs := GENERIC_READ; Schreibzugriff verweigern. 2= ShareIs := FILE_SHARE_READ geöffnet wurde. Rewrite öffnet die Datei zum Schreiben - da kracht es weil die Datei nur zum Lesen geöffnet wurde. Grüße Klaus |
AW: Fehler beim überschreiben von Datei
Zitat:
Delphi-Quellcode:
Ist das ein Vielleicht FClose?
// MidiTrackerFile schließen
FClose(myFile); FPBuffer := nil; FToPBuffer := nil; Result := True; Zitat:
Siehe FClose.... Die zugriffsrechte haben dann keine Bedeutung mehr. Es sei denn das schließen des Handle allein genügt nicht! Und die Datei ist mehr oder weniger immer noch offen. Oder aber die zugriffsrechte werden in die Datei gespeichert! Dann wäre es verständlich wenn sie sich nicht überschreiben läßt. grrr.... gruss |
AW: Fehler beim überschreiben von Datei
wäre es nicht mal sinnvoll, einen größeren Teil des Quellcodes auszupacken? - Zumindest mit dem Teil hier habe ich so meine Probleme:
Zitat:
Bernhard |
AW: Fehler beim überschreiben von Datei
Zitat:
Globale Variablen habe ich rausgeschmissen und deklariere sie nun in meiner procedure direkt. Ich glaube den Mist habe ich vor langer zeit mal selbst verzapft. Ich denke weil ich zu der zeit (und immer noch nicht weis) wie ich hFile durch eine EOF schleife laufen lassen kann. Das ich die Datei dadurch 2 mal öffne ist mir nicht wirklich aufgefallen. EDIT: Sehe gerade kann hFile gar nicht mit EOF öffnen da EOF zu Pascal und hFile zur Win32 Api gehört. grrr.. muss dann wieder alles umschreiben. Ok geht jetzt.. Habe meine procedure umgeschrieben.
Delphi-Quellcode:
Die Datei dann nochmals über hFile zu öffnen macht dann nicht wirklich sinn.
procedure FBuffin(FileName: string);
var sBuffer: string; f : TextFile; begin if not FExist(FileName) then Exit; Assignfile(f, FileName); reset(f); while not eof(f) do begin ReadLN(f, sBuffer); FSeekTo(nReading, sBuffer); inc(nReading); end; CloseFile(f); end; gruss |
AW: Fehler beim überschreiben von Datei
Hallo Emil,
ich würde die FBuffin Procedure so umbauen, dass die Datei darin geöffnet und auch geschlossen wird.
Delphi-Quellcode:
So weit ich gesehen habe, wird die Variable hFile nicht
procedure FBuffin(FileName: string; {var hFile: THandle});
var sBuffer: string; f : TextFile; hFile : THandle; begin if not FExist(FileName) then Exit; nErrCode := FOpen(FileName, 2, 4, hFile); // Was willst Du damit bewecken? // Nur einen ErrorCode bekommen? if nErrCode <> 0 then exit; nReading := 0; Assignfile(f, FileName); {$I -} reset(f); {$I +} if IOResult = 0 then begin while not eof(f) do begin ReadLN(f, sBuffer); FSeekTo(nReading, sBuffer); inc(nReading); end; closeFile(f); end; fClose(hFile); end; in der Routine ParsetoMidiTracker verwendet (ausser für fClose). Grüße Klaus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:47 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 by Thomas Breitkreuz