Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Dateistatus abfragen??? (https://www.delphipraxis.net/22189-dateistatus-abfragen.html)

Madcat 13. Mai 2004 19:44


Dateistatus abfragen???
 
Sorry den post gibts jetzt doppelt. hab den ausversehen auch in "klatsch und trasch" gestellt. newbies fehler ;)
so jetzt aber :

ich(oder besser eine projekt gruppe) habe ein programm geschrieben welches eine textdatei einliest,konvertiert und in eine sql datenbank schreibt. die textdatei wird nach dem einlesen gelöscht. eine neue textdatei wird von einer sps geschickt. jetzt gibt es nach ein paar hundertmal einlesen immer wieder mal einen I/O error.
meine theorie ist das, dass schreiben und einlesen der datei gleichzeitig passiert. mit FileExist wird schon abgefragt ob die datei vorhanden ist. trotzdem kommt die fehlermeldung.
das einlesen der datei geschied über : FileMode = 0, AssisgnFile, Reset und Blockread.
Gibt es irgendeine Möglichkeit den Status einer Datei abzufragen?? Oder hat jemand eine erklärung wie man sonst den I/O error wegbekommen kann? hab da was von einer compilerdirektive mit {$-} gelesen. aber die unterdrückt doch dann nur die delphifehlermeldung und nicht die windowsfehlermelder oder?

glkgereon 13. Mai 2004 20:56

Re: Dateistatus abfragen???
 
macht dochn timer, dasser, bevor er einliest, immer ein halbes sekündchen wartet

oder nur auf buttonklick einlesen

Madcat 15. Mai 2004 20:08

Re: Dateistatus abfragen???
 
Also mit dem Button wird wohl nicht funktioniren weil ich nicht 500mal am Tag zum Server laufen kann und nen Button drücken. Wird schwer das meinen Chef zu erklären :shock:

Mit dem Timer hab ich auch schon überlegt. Nur finde ich es komisch das die Abfrage FileExist postiv ist wenn die Datei noch nicht komplett fertig geschrieben ist.

Habe was gelesen, das man mit FileCreate abfragen kann ob eine Datei exklusiv in Benutztung ist. Weiß da jemand was genaueres weil ich mit der Delphi-Hilfe nicht so ganz klarkomme bei diesem Befehl

Madcat 15. Mai 2004 20:11

Re: Dateistatus abfragen???
 
Also mit dem Button wird wohl nicht funktioniren weil ich nicht 500mal am Tag zum Server laufen kann und nen Button drücken. Wird schwer das meinen Chef zu erklären :shock:

Mit dem Timer hab ich auch schon überlegt. Nur finde ich es komisch das die Abfrage FileExist postiv ist wenn die Datei noch nicht komplett fertig geschrieben ist.

Habe was gelesen, das man mit FileCreate abfragen kann ob eine Datei exklusiv in Benutztung ist. Weiß da jemand was genaueres weil ich mit der Delphi-Hilfe nicht so ganz klarkomme bei diesem Befehl

nailor 15. Mai 2004 20:11

Re: Dateistatus abfragen???
 
HANDLE CreateFile(

LPCTSTR lpFileName, // pointer to name of the file
DWORD dwDesiredAccess, // access (read-write) mode
DWORD dwShareMode, // share mode
LPSECURITY_ATTRIBUTES lpSecurityAttributes, // pointer to security attributes
DWORD dwCreationDistribution, // how to create
DWORD dwFlagsAndAttributes, // file attributes
HANDLE hTemplateFile // handle to file with attributes to copy
);

dwShareMode
Set of bit flags that specifies how the object can be shared. If dwShareMode is 0, the object cannot be shared. Subsequent open operations on the object will fail, until the handle is closed.
To share the object, use a combination of one or more of the following values:

Value Meaning
FILE_SHARE_DELETE Windows NT only: Subsequent open operations on the object will succeed only if delete access is requested.
FILE_SHARE_READ Subsequent open operations on the object will succeed only if read access is requested.
FILE_SHARE_WRITE Subsequent open operations on the object will succeed only if write access is requested.


############################

setzt den share-mode auf "0", das sollte in der tat helfen

PS: "Habe was gelesen, das man mit FileCreate abfragen kann ob eine Datei exklusiv in Benutztung ist. Weiß da jemand was genaueres weil ich mit der Delphi-Hilfe nicht so ganz klarkomme bei diesem Befehl" nicht nachschauen, sondern bestimmen

PS2: der obige Code ist aus dem WindowsSDK, nicht der Delphi-Hilfe direkt, aber das SDK ist normal bei der Hilfe dabei, bei Delphi 7 sogar im Menü integriert

PS3: Hilft natürlich nur, wenns wirklich daran liegt

toms 15. Mai 2004 20:15

Re: Dateistatus abfragen???
 
Delphi-Quellcode:
function FileInUse(FileName: string): Boolean;
var
  hFileRes: HFILE;
begin
  Result := False;
  if not FileExists(FileName) then
    Exit;
  hFileRes := CreateFile(PChar(FileName),
    GENERIC_READ or GENERIC_WRITE,
    0,
    nil,
    OPEN_EXISTING,
    FILE_ATTRIBUTE_NORMAL,
    0);
  Result := (hFileRes = INVALID_HANDLE_VALUE);
  if not Result then
    CloseHandle(hFileRes);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:16 Uhr.

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