Autor Beitrag
MarkusReisser
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mo 16.04.12 15:00 
Hallo Community,

ich habe folgendes vor:

Eine Datei erzeugen (5MB groß mit dem Namen 5242880). Nach dem erzeugen möchte ich prüfen, ob die Datei wirklich 5 MB groß ist. Wenn dies so ist, dann möchte ich diese Datei auf einen FTP hochladen.

Grundsätzlich funktioniert folgendes: Ich klicke auf meinen Upload Button und die Datei 5 MB wird erzeugt. Dann wird 5 Sekunden gewartet (damit die Datei auch wirklich komplett erstellt ist) und sie wird hochgeladen. Wenn die Datei jedoch schon existiert, dann muss sie nicht vor dem Upload erstellt werden.

Wenn ich die Datei aber nach dem Erstellen auch noch auf die Größe prüfen will, dann passsiert folgendes.

Die Prozedur erzeuge5mb() wird ausgeführt und gleich danach wird die Datei auf deren Größe geprüft. Das ganze funktioniert nicht, da sie ja noch nicht komplett erstellt ist.

Ich will das ganze ungern durch Timer machen, die einfach Wartezeiten erzeugen. Das würde zwar funktionieren, aber da muss es doch auch eine richtige Lösung geben?

Habt Vielen Dank für Eure Hilfe.

Mfg

Meine Code-Schnipsel sehen so aus:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure erzeuge5mb();   // 5 MB Datei erzeugen für den Upload
begin
 ShellExecute(Application.Handle, 'open''fsutil''file createnew 5242880 5242880'nil, SW_HIDE);
end;



ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.Button11Click(Sender: TObject);
begin
 if FileExists('5242880'then begin                 // wenn Datei 5242880 existiert...
  // GetFileSize('5242880');        // Funktionsaufruf um Dateigröße zu überprüfen
  Form1.FTP.Put('5242880''5242880', true);    // Upload 5 MB
  end  // end FileExist
   else begin                                           // sonst
    erzeuge5mb();                                // erzeuge sie vor dem Upload
    Form1.Timer5MB.Enabled:=true;     // Timer2 starten und weitere Anweisungen in TForm1.Timer5MB
   end // end else begin
end;



ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.Timer5MBTimer(Sender: TObject);
begin
 t5:=t5+1;
  if t5=5 then begin    // Timer5 soll 5 Sekunden laufen
   // GetFileSize('5242880');        // Funktionsaufruf
   Form1.FTP.Put('5242880''5242880', true);    // Upload 5 MB
   Form1.Timer5MB.Enabled:=false;    // Timer5 beenden
   t5:=1;  // Timer5 zurücksetzen
   end  // end if t=5
   else
    //nichts
end;



ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
function GetFileSize(const FileName:string):Int64;
var
  FileStream:TFileStream;
begin
  FileStream:=TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone);
  try
   try
    Result:=FileStream.Size;
   except
    Result:=0;
   end;
  finally
   FileStream.Free;
   // Meldung und ggf. Uploadwunsch abbrechen
  end;
end;
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 16.04.12 15:43 
Moin!

user profile iconMarkusReisser hat folgendes geschrieben Zum zitierten Posting springen:
da muss es doch auch eine richtige Lösung geben?
Das tut es auch, nämlich nicht ShellExecute nehmen. ;) Schau mal hier, das sollte helfen. :idea:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 16.04.12 17:30 
Warum benutzt du fsutil, wenn es dir nur darum geht eine Datei mit einer bestimmten Größe zu erzeugen? :shock:
(jedenfalls verstehe ich den Quelltext so)
MarkusReisser Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mo 16.04.12 20:31 
Da soll kein bestimmter Inhalt drin sein :) Es geht nur darum, dass die Datei auch wirklich die bestimmte Größe hat :) Was gibt es da noch?
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Mo 16.04.12 20:44 
Einfach eine Datei anlegen und die Größe setzen?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
fs:= TFileStream.Create(Dateiname, fmCreate);
try
  fs.Size:= 5*1024*1024;
finally
  fs.Free;
end;

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
MarkusReisser Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Di 17.04.12 08:59 
Die Dateien lassen sich auf diesem Weg so schnell erstellen, dass ich diese im Anschluss auf deren Größe überprüfen kann, auch ohne eine Wartezeit über einen Timer einzubauen.

Ich bin echt begeistert :)

Dann kann ich nun das Programm abspecken und die ShellExecute und die Timer rausschmeißen.

Echt super, ich danke Euch :)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 17.04.12 10:28 
Wenn es beim Setzen der Größe keinen Fehler gab, brauchst du die Größe eigentlich auch gar nicht prüfen. :nixweiss:
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 17.04.12 11:31 
Moin!

Wenn wir schon bei der Diskussion um die Sinnhaftigkeit angekommen sind, warum dann überhaupt die Platte zumüllen? :nixweiss: Ich kann 5MB doch auch problemlos aus einem Memory-Stream hochladen... 8)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.