Autor Beitrag
hibbert
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: Mi 05.11.03 16:51 
Hi,
mist, ich habe mal wieder was vergessen und zwar will ich ne abfrage machen, ob die datei schon ausgeführt wurde bzw. ob die Datei von Windows schon benutzt wird.

Da war mal was mit if file danbn irgendwas mit is in use (oder so) und dass der Pfad der datei.

Wer kann mir auf die sprünge helfen?

thx hibbert.

_________________
I kunnen väl svara endast ja eller nej
Om i viljen eller nej
bIce
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 55



BeitragVerfasst: Mi 05.11.03 19:28 
Willst Du prüfen ob eine Datei von Windows gerade benutzt wird, oder? Wenn ja verwende einfach FileAge(), wenn die Datei gesperrt ist kommt es zu einer Exception (zumindest unter Win98).
Eine mögliche Funktion wäre:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
function fileInUse(filePath: String) : Boolean;
begin
   Result := false;
   try
      FileAge(filePath);
   except
      Result := true;
   end;
end;

_________________
Gott mag anscheinend einfache Leute, denn er hat viele von ihnen erschaffen.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 05.11.03 20:14 
Wird aber nur funktionieren, wenn die Datei exklusiv geöffnet ist.
hibbert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: Do 06.11.03 00:00 
naja, vielleicht habe ich mich ja oben etwas falsch ausgedrückt, ich meinte ob eine Datei verwendet wird (nicht speziell von Windows). egal, ob sie in einem Texteditor oder von einem anderen Programm geöffnet bzw. benutzt wird.

ich meine da gab bzw. gibt es so was if fileisinuse oder so ähnlich.

thx hibbert

_________________
I kunnen väl svara endast ja eller nej
Om i viljen eller nej
bIce
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 55



BeitragVerfasst: Fr 07.11.03 20:41 
IMO ist das unmöglich, die Datei wird ja einfach eingelesen und geschlossen, im Arbeitsspeicher ist dann ein Abbild der Datei, dass Du mit dem Editor verändern kannst. Ich weiß nicht wie das mit Notepad aussieht aber mit den Edit-Komponenten (auch TMemo, TRichEdit und TSynEdit) funktionieren so. D.h. man kann nur während die Datei gespeichert, bzw. gelesen wird, festestellen ob auf sie zugegriffen wird.

_________________
Gott mag anscheinend einfache Leute, denn er hat viele von ihnen erschaffen.
Jörg Oulabi
Hält's aus hier
Beiträge: 7

Win XP
D5 Pers, D6 Pers
BeitragVerfasst: So 09.11.03 02:09 
Hi...

Also... ich hatte da gleiche Problem.
Erst musste ich eine Datei schreiben und diese dann gleich danach wieder öffnen um sie weiter zu bearbeiten. Das Problem war, das die zuerst erzeugte Datei ziemlich gross und sie wurde mit der Abfrage "fileexists" schon erkannt bevor sie wieder geschlossen wurde. Ein zu schneller Zugriff bevor die Datei fertig geschrieben und geschlossen wurde führte dann zu einer Exception.
Ich hab das Problem dann so gelöst:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
repeat   {sicherstellen u. warten bis datei erzeugt wurde}
  Application.ProcessMessages;
   AssignFile(in_datei, 'c:\odas\ges_export.txt');
   {$I-}
   reset(in_datei);
   {$I+}
   f:=IoResult;
 until f=0;
 CloseFile(in_datei);


Beste Grüsse
Jörg
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 10.11.03 14:01 
Titel: Wie wär's damit?
Hallo!

Wie wäre es mit folgendem Sourcecode von Scalabium.com:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
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;


Die vorher von Jörg angegebene Methode funktioniert ähnlich, aber ich finde das so am besten, vor allem weil die Fehlerbehandlung, die bei Jörg abgeschaltet wurde, dort von der Funktion intern übernommen wird.

Gruß,
S.J.