![]() |
Delphi-Version: 6
E/A Fehler 32
Hallo zusammen,
ich bekomme in der Rutine beim löschen der Datei einen Fehler E/A 32 (Datei wird von einer anderen Anwendung benutz). Habe aber vorher einen einen closefile() eingesetzt. Sieht jemand den Fehler?? Danke für die Hilfe!
Delphi-Quellcode:
procedure artikelnummern_sort;
var zaehler : integer; Begin fartikelimport_neu.CBArtikelsort.Visible := true; fartikelimport_neu.CBArtikelsort.Items.Clear; assignfile(artikeldatei,stammverzeichnisname + '\' + datenverzeichnisname + '\' + artikeldateiname); reset(Artikeldatei); while not (eof(Artikeldatei)) do Begin init_artikel(artikel); read(Artikeldatei,artikel); str(artikel.typ:1,dummy); dummy_zeile := trim(dummy) + '|'; str(artikel.Artikelnummer:10:0,dummy); dummy := '00000000000000000000000000' + trim(dummy); dummy := copy(dummy,length(dummy) - 15,length(dummy)); dummy_zeile := dummy_zeile + trim(dummy) + '|'; str(artikel.Artikelposition:10,dummy); dummy_zeile := dummy_zeile + trim(dummy); fartikelimport_neu.CBArtikelsort.Items.Add(dummy_zeile); end; assignfile(reorg_artikeldatei,stammverzeichnisname + '\' + datenverzeichnisname + '\' + 'S' + artikeldateiname); rewrite(reorg_artikeldatei); for zaehler := 0 to fartikelimport_neu.CBArtikelsort.Items.Count - 1 do Begin dummy_zeile := fartikelimport_neu.CBArtikelsort.Items[zaehler]; init_artikel(artikel); dummy := copy(dummy_zeile,1,pos('|',dummy_zeile) - 1); val(dummy,artikel.typ,valok); dummy_zeile := copy(dummy_zeile,pos('|',dummy_zeile) + 1,length(dummy_zeile)); dummy := copy(dummy_zeile,1,pos('|',dummy_zeile) - 1); val(dummy,artikel.Artikelnummer,valok); dummy_zeile := copy(dummy_zeile,pos('|',dummy_zeile) + 1,length(dummy_zeile)); val(dummy_zeile,artikel.Artikelposition,valok); seek(artikeldatei,artikel.Artikelposition - 1); init_artikel(artikel); read(artikeldatei,artikel); artikel.Artikelposition := filesize(reorg_artikeldatei) + 1; write(reorg_artikeldatei,artikel); end; closefile(reorg_artikeldatei); close(artikeldatei); erase(artikeldatei); //<== Hier kommt der Fehler!!! if DeleteFiles(stammverzeichnisname + '\' + datenverzeichnisname + '\' + artikeldateiname) then rename(reorg_artikeldatei,stammverzeichnisname + '\' + datenverzeichnisname + '\' + artikeldateiname); fartikelimport_neu.CBArtikelsort.Visible := false; end; |
AW: E/A Fehler 32
So auf Anhieb fällt mir da der Virenscanner ein.
Außerdem: Du benutzt einmal CloseFile und direkt danach Close (ist aber hier wohl nicht die Ursache) Und: Es gibt zwar ein DeleteFile, aber soweit ich weiß kein DeleteFiles. Tut das nicht dasselbe wie das Erase? |
AW: E/A Fehler 32
Delphi-Quellcode:
Sicher daß das Close richtig ist?
closefile(reorg_artikeldatei);
close(artikeldatei) Nja, die fehlenden Resourcenschutzblöcke ignorier ich einfach mal und daß man eventuell mit Streams auch nicht schlecht arbeiten würde, wird auch nicht erwähnt und bei deinem binären Format hätte sich TReader/TWriter bestimmt auch nicht schlecht gemacht. Und warum sind eigentlich die lokal genutzten Dateivariablen global definiert? [edit] Das doppelgemoppelte Löschen wurde schon erwähnt. |
AW: E/A Fehler 32
Hallo,
sollte grundsätzlich funktionieren. Mir ist aber dieses Problem irgendwie bekannt. Kann mich aber nicht mehr genau erinnern. Ich weiß nur noch sicher, dass ich diese Fehlermeldung bekommen habe, wenn ich beim Debugen das Programm vor dem Close beendet habe. Da half nur ein Neustart des Rechners. Wie bereits zum Teil erwähnt, enthält der Code einige "Besonderheiten": Close und Closefile: in Delphi6 erlaubt, in Delphi XE3 "Zu viele Parameter" bei Close. Close schließt das Fenster (oder Programm). Sollte auch in Delphi6 für Files nicht mehr verwendet werden. - erase(artikeldatei); - If DeleteFiles(stammverzeichnisname + '\' + datenverzeichnisname + '\' + artikeldateiname) then Diese beiden Zeilen verhindern das Funktionieren des Programms - wenns funktioniert. erase löscht die Datei. DeleteFiles gibt false zurück, wenn die Datei nicht existiert - in diesem Fall also immer der Fall. |
AW: E/A Fehler 32
Ach ja, und der Fehler 32
Zitat:
|
AW: E/A Fehler 32
Ich würde "Aufräumen" vorschlagen.
Obwohl formal alles in Ordnung zu sein scheint, behagt mir die externe Definition der Dateien überhaupt nicht. Auch wenn
Delphi-Quellcode:
bis D2006 zulässig ist, rate ich da ganz schnell auf die neueren methoden um zu stellen. Denn das ist augenscheinlich ein altes TP-Programm, und aus meiner Erfahrung waren die Dateizugriffedie Schwachstelle bei der Neucompilierung unter Delphi.
close
Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:13 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