AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Größe einer "unfertigen" Datei...?
Thema durchsuchen
Ansicht
Themen-Optionen

Größe einer "unfertigen" Datei...?

Ein Thema von Adversus · begonnen am 28. Apr 2006 · letzter Beitrag vom 28. Apr 2006
Antwort Antwort
Adversus

Registriert seit: 12. Jan 2006
12 Beiträge
 
#1

Größe einer "unfertigen" Datei...?

  Alt 28. Apr 2006, 12:24
Moin Leutz !

Hab ma ne schwierige frage (denk ich zumindest *g) für euch: Wie kann ich die größe einer Datei bestimmen welche gerade noch erstellt/kopiert wird ?

(Oder ihr verratet mir wie ich den Fortschritt von SHFileOp sonst abfragen kann...ohne den Standart-Dialog ! )

thx, Adversus
  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: Größe einer "unfertigen" Datei...?

  Alt 28. Apr 2006, 12:30
Habe nach Hier im Forum suchenShFileOperation CallBack gesucht und diesen Beitrag gefunden:

http://www.delphipraxis.net/internal...ation+callback

leider scheint es mit dieser Funktion nicht zu klappen. Allerdings kannst du dir ja deine eigene Kopierfunktion basteln. Denke mal, dass man über Hier im Forum suchenDatei kopieren Fortschritt etwas passendes findet.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Adversus

Registriert seit: 12. Jan 2006
12 Beiträge
 
#3

Re: Größe einer "unfertigen" Datei...?

  Alt 28. Apr 2006, 12:50
...danke, aber das hab ich ja versucht...mit genau dieser funktion klappt das zwar für meinen lokalen pc...aber wenn ich was übers netzwerk kopiere klappt der fortschritt nicht...laut progressbar ist er schon fertig...kopiert dann aber noch 5minuten bis er wirklich fertig is (bei großen dateien)

Hab das verwendet:

Delphi-Quellcode:
function CopyExThread(p: PCopyEx): Integer;
var
  Source: String;
  Dest: String;
  Handle: THandle;
  Cancel: PBool;
  FromF, ToF : file of byte;
  Buffer : array[0..4096] of char;
  NumRead : integer;
  FileLength : longint;
begin
  Source := p.Source;
  Dest := p.Dest;
  Handle := p.Handle;
  Cancel := PBOOL(False);

  AssignFile(FromF,Source);
  reset(FromF);
  AssignFile(ToF,Dest);
  rewrite(ToF);
  FileLength:=FileSize(FromF);

  With form1.copyProgressbar1 do
    begin
      Min := 0;
      Max := FileLength;
      while FileLength > 0 do
      begin
        BlockRead(FromF,Buffer[0],SizeOf(Buffer),NumRead);
        FileLength := FileLength - NumRead;

       while pausecopy=true do
       begin Application.ProcessMessages; end;

       BlockWrite(ToF,Buffer[0],NumRead);
       Application.ProcessMessages;
       Position := Position + NumRead;
      end;
  CloseFile(FromF);
  CloseFile(ToF);
 end;
  Dispose(p);
  result := 0;
end;
Vielleicht kann mir ja einer sagen wie man das hinbekommt das der progress auch im LAN stimmt ????
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: Größe einer "unfertigen" Datei...?

  Alt 28. Apr 2006, 13:07
Du kannst ja alle 100 Blocks ein FlushFileBuffers(Handle) einschieben.
Du brauchst dazu allerdings das Handle der Zieldatei:
FlushFileBuffers(TTextRec(ToF).Handle)
Andreas
  Mit Zitat antworten Zitat
Adversus

Registriert seit: 12. Jan 2006
12 Beiträge
 
#5

Re: Größe einer "unfertigen" Datei...?

  Alt 28. Apr 2006, 13:19
mir fiel grad was auf: mein programm was das verwendet soll ne ganze liste von dateien kopieren...hab zu testzwecken mehrere klein dateien und ne große 700mb datei in die liste gesteckt. wo ich die nun kopiert hab ging der progress viel zu schnell für die 700mb-datei...als ich jetz grad nur die 700er so kopiert hab hats gestimmt...das problem muss also woanders liegen..nämle in meiner schleife für die liste:

Delphi-Quellcode:
for x:=0 to copylist2.Items.Count-1 do
    begin
      s:=ExcludeTrailingPathDelimiter(Edit17.text+copylist2.Items[x].SubItems[1]);
      s:=ExcludeTrailingPathDelimiter(ExtractFilePath(s));

      //Verzeichnisse erstellen
      if not DirectoryExists(s) then
      begin
         log.Items.Add.text:=('Erstelle Ordner: '+s);
         if not ForceDirectories(s) then
         raise Exception.Create('Verzeichnis kann nicht erstellt werden: '+ s);
      end;

      log.Items.Add.text:=(Edit17.text+copylist2.Items[x].SubItems[1]);
      Application.ProcessMessages;

      //Copy-Thread einleiten
      New(Params);
      Params.Source := copylist2.Items[x].SubItems[0]+copylist2.Items[x].SubItems[1];
      Params.Dest := ExcludeTrailingPathDelimiter(Edit17.text)+copylist2.Items[x].SubItems[1];
      Params.Handle := Handle;
      CloseHandle(BeginThread(nil, 0, @CopyExThread, Params, 0, ThreadID));

      copyProgressBar2.Position:=copyProgressBar2.Position+1;

     end;

    end;
...irgendwie wird da das copyProgressBar2.Position:=copyProgressBar2.Positi on+1 schon aufgerufen obwohl der thread noch gar ni fertig is...wie kann ich das jetz verhindern ???? reicht es da dieses FlushFile-Ding aufzurufen ???
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:37 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