Entwickler-Ecke
Dateizugriff - Datei erzeugen und überprüfen vor der Verwendung
MarkusReisser - Mo 16.04.12 15:00
Titel: Datei erzeugen und überprüfen vor der Verwendung
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:
Delphi-Quelltext
1: 2: 3: 4:
| procedure erzeuge5mb(); begin ShellExecute(Application.Handle, 'open', 'fsutil', 'file createnew 5242880 5242880', nil, SW_HIDE); end; |
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.Button11Click(Sender: TObject); begin if FileExists('5242880') then begin Form1.http://FTP.Put('5242880', '5242880', true); end else begin erzeuge5mb(); Form1.Timer5MB.Enabled:=true; end end; |
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 Form1.http://FTP.Put('5242880', '5242880', true); Form1.Timer5MB.Enabled:=false; t5:=1; end else end; |
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; end; end; |
jaenicke - 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 - 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 - Mo 16.04.12 20:44
Einfach eine Datei anlegen und die Größe setzen?
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| fs:= TFileStream.Create(Dateiname, fmCreate); try fs.Size:= 5*1024*1024; finally fs.Free; end; |
MarkusReisser - 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 - 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 - 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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!