AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Problem mit TFileStream (und DeleteFile)
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit TFileStream (und DeleteFile)

Ein Thema von Helmi · begonnen am 18. Nov 2004 · letzter Beitrag vom 19. Nov 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#1

Problem mit TFileStream (und DeleteFile)

  Alt 18. Nov 2004, 20:12
Hallo Jungs,

ich habe ein Problem mit einem TFileStream (und DeleteFile).

Kurze Erklärung:

mit ...
Code:
If FileExists(SaveFile) then
 DeleteFile(SaveFile);
... wird vorsichtshalber die Datei (SaveFile) gelöscht ...

... mit ...
Code:
ZielDatei := TFileStream.Create(SaveFile, fmCreate);
wir dann die Datei (SaveFile) erzeugt.


SaveFile ist zu diesem Zeitpunkt eine ExeDDatei (c:\test.exe)
Eigenartiger weise kann man mit DeleteFile diese Exe nicht löschen (keine Ahnung warum)


Danach kommt die Zeil mit dem ZielDatei und dann bekomm ich folgende Meldung:

Zitat:
Im Projekt Monitor_Client.exe ist eine Exception der Klasse EFCreateError aufgetreten. Meldung: 'Datei "E:\Delphi\ISDN-Monitor Client\Client_Update.exe" kann nicht erstellt werden. Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
Gibt es ne Möglichkeit mit TFileStream trotzdem die Datei zu createn auch wenn es sich nicht mit DeleteFile löschen lässt?

mfg
Helmi
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#2

Re: Problem mit TFileStream (und DeleteFile)

  Alt 18. Nov 2004, 20:24
Normalerweise wird diese Datei neu erstellt und überschrieben. Ich vermute das auf die Exe noch zugegriffen wird oder die Exe gestartet ist. Deshalb funktioniert auch das Löschen nicht.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Problem mit TFileStream (und DeleteFile)

  Alt 18. Nov 2004, 20:30
die exe ist zu diesem Zeitpunkt nicht in Gebrauch und wurde auch zuvor nicht benutzt und wird nicht benutzt
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Problem mit TFileStream (und DeleteFile)

  Alt 18. Nov 2004, 20:44
Hast du auch irgendwo vor dem Löschen auch TFileStream.Free aufgerufen, um die Datei wieder zu schließen? Zeig mal etwas mehr Code.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Problem mit TFileStream (und DeleteFile)

  Alt 18. Nov 2004, 21:02
der Herr will Code, hier hadda Code :

Code:
var
  zielDatei: TFileStream;

begin
          //Cursor = Sanduhr
          Screen.Cursor := crHourglass;

          try
            //Prüfen ob Datei schon vorhanden, wenn ja, löschen
            If FileExists(SaveFile) then
              DeleteFile(SaveFile);

            ZielDatei := TFileStream.Create(SaveFile, fmCreate);

            ProgressBar_Update.Position := 0;
            pbReceived := fSize;

            //Datei empfangen und speichern
            while True do
              begin
                nReceived := Socket.ReceiveBuf(Buffer, sizeof(Buffer));
                if nReceived <= 0 then
                  Break
                else
                  ZielDatei.WriteBuffer(Buffer, nReceived);

                Sleep(300);

                pbReceived := pbReceived - nReceived;
                ProgressBar_Update.Position := 100 - ((pbReceived * 100) div fSize);

                Application.ProcessMessages;
              end;

              ZielDatei.Position := 0;
          finally
            FreeAndNil(zielDatei);
          end;

          //Cursor = Normal
          Screen.Cursor := crDefault;
vor dem ZielDatei := TFileStream.Create wird ZielDatei nirgends verwendet
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#6

Re: Problem mit TFileStream (und DeleteFile)

  Alt 18. Nov 2004, 23:34
Zitat von Helmi:
Eigenartiger weise kann man mit DeleteFile diese Exe nicht löschen (keine Ahnung warum)
Dann mach doch mal...
Delphi-Quellcode:
  if not DeleteFile(SaveFile) then
    ShowMessage(SysErrorMessage(GetLastError));
Vielleicht sagt dir Windows ja warum du die Datei nicht löschen kannst.
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#7

Re: Problem mit TFileStream (und DeleteFile)

  Alt 19. Nov 2004, 05:51
Wo wird denn diese Funktion aufgerufen? Ich kann mir vorstellen, dass die Funktion ein zweites mal aufgerufen wird, während sie beim Empfang der Daten ist (also in der Schleife). Durch das Application.ProcessMessage ist es durchausmöglich. Dann wäre die Datei durch den Filestream noch geöffnet.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#8

Re: Problem mit TFileStream (und DeleteFile)

  Alt 19. Nov 2004, 09:52
also aufgerufen wird sie durch:

Code:
procedure TForm1.ClientSocketRead(Sender: TObject;
  Socket: TCustomWinSocket);
{...}
begin

      if not Working then
        begin
          //Variable setzen
          Working := True;

          //Cursor = Sanduhr
          Screen.Cursor := crHourglass;

          try
            //Prüfen ob Datei schon vorhanden, wenn ja, löschen
            If FileExists(SaveFile) then
              DeleteFile(SaveFile);

            ZielDatei := TFileStream.Create(SaveFile, fmCreate);

            ProgressBar_Update.Position := 0;
            pbReceived := fSize;

            //Datei empfangen und speichern
            while True do
              begin
                nReceived := Socket.ReceiveBuf(Buffer, sizeof(Buffer));
                if nReceived <= 0 then
                  Break
                else
                  ZielDatei.WriteBuffer(Buffer, nReceived);

                Sleep(300);

                pbReceived := pbReceived - nReceived;
                ProgressBar_Update.Position := 100 - ((pbReceived * 100) div fSize);

                Application.ProcessMessages;
              end;

              ZielDatei.Position := 0;
          finally
            FreeAndNil(zielDatei);
          end;

          //Cursor = Normal
          Screen.Cursor := crDefault;

          //Prüfen ob die angekommene Datei die Größe der Original-Datei hat
          If FileExists(SaveFile) and (GetFileSize(SaveFile) = fSize) then
            begin
              //Variable löschen
              Buffer := '';

              //Kommando senden
              Socket.SendText('GOTFILE!');

              //TrayIcon beschreiben
              TrayIcon.Icon := IconRot;

              If New_Client_Update then
                begin
                  //Timer Update enablen
                  Timer_Update.Enabled := true;

                  //Label beschreiben
                  LabelTimer_Update_Info.TimeOutEnabled := false;

                  LabelTimer_Update_Info.Caption :=
                          'Update wurde empfangen und wird jetzt installiert!';

                  Label_Date_Time.Caption :=
                         FormatDateTime('d. mmmm yyyy hh:mm:ss', Now) + ' Uhr';
                end
              else
                begin
                  //Timer Update disablen
                  Timer_Update.Enabled := false;

                  //Progressbar wieder auf 0 setzen
                  ProgressBar_Update.Position := 0;

                  //Label beschreiben
                  LabelTimer_Update_Info.TimeOutEnabled := true;
                  LabelTimer_Update_Info.Caption       := 'Datei wurde übertragen!';
                end;
            end
          else
            begin
              //Timer Update disablen
              Timer_Update.Enabled := false;

              //Progressbar wieder auf 0 setzen
              ProgressBar_Update.Position := 0;

              //Variable löschen
              Buffer := '';

              //Datei löschen
              DeleteFile(SaveFile);

              //Label beschreiben
              LabelTimer_Update_Info.TimeOutEnabled := true;

              LabelTimer_Update_Info.Caption       :=
                                            'Fehler beim Empfangen der Datei!';

              //Kommando senden
              Socket.SendText('FILEERROR!');
            end;

          //Umschalten auf Kommando-Empfang
          ClientStatus := csIdle;

          //Variable beschreiben
          Working      := False;
        end;
mit der Variablen Working wird ja das zweimal-Aufrufen verhindert
  Mit Zitat antworten Zitat
DerDan

Registriert seit: 15. Nov 2004
Ort: Donaueschingen
251 Beiträge
 
Delphi XE3 Professional
 
#9

Re: Problem mit TFileStream (und DeleteFile)

  Alt 19. Nov 2004, 11:34
wie heist denn deine exe und wie die exe die du löschen willst?
nichts ist so schön wie man es sich vorstellt
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#10

Re: Problem mit TFileStream (und DeleteFile)

  Alt 19. Nov 2004, 11:37
was willst du genau wissen?

ach ja - ich hab mal vergessen zu erwähnen dass nicht nur exe-dateien erzeugt werden, bzw übertragen sondern alle möglichen dateien können übertragen werden
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:38 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