Re: Does It Fit? Ein nützliches Brenntool
Ich habe eine DIRSIZE-Funktion gefunden, die identische Werte wie der Explorer anzeigt:
Delphi-Quellcode:
...
var TotalSize: Int64; //global ... function AddThouSeps (const S: string): string; var LS, L2, I : Integer; Temp : string; begin result := S ; LS := Length (S); if LS <= 3 then exit ; L2 := (LS - 1) div 3; Temp := ''; for I := 1 to L2 do Temp := ThousandSeparator + Copy (S, LS - 3 * I + 1, 3) + Temp; Result := Copy (S, 1, (LS - 1) mod 3 + 1) + Temp; end; function DirSize(Path: string; ScanLabel, SizeLabel: TLabel): Int64; { func to return the total number of bytes found in a directory. } { You can pass 2 TLabels for a progress while scanning: ScanLabel: will display the current path being scanned SizeLabel: will display the total size so far counted. If you don't want to use either Labels, pass nil to both. You can still use returned value to read the total size. Example: (For Delphi 4/5) TotalSize := 0; Label1.Caption := IntToStr(DirSize('C:\Windows', nil, nil)) + ' bytes'; (For Delphi 3) TotalSize := 0; Label1.Caption := FloatToStr(DirSize('C:\Windows', nil, nil)) + ' bytes'; (It is a little faster this way.) Note: you MUST initialize the global TotalSize variable to 0 before using this function. } var Res: Integer; SR: TSearchRec; begin Result := TotalSize; if Copy(Path, Length(Path), 1) <> '\' then Path := Path + '\'; if not DirectoryExists(Path) then begin MessageDlg('Directory does not exist: ' + Path, mtError, [mbOK], 0); Exit; end; if ScanLabel <> nil then begin ScanLabel.Caption := 'Scanning ' + Path; ScanLabel.Update; end; Res := FindFirst(Path + '*.*', faAnyFile, SR); try while Res = 0 do begin if (SR.Name [1] <> '.') and (SR.Name [1] <> '..') then begin if ((SR.Attr and faDirectory) <> 0) then DirSize(Path + SR.Name + '\', ScanLabel, SizeLabel) else TotalSize := TotalSize + SR.Size; end; Res := FindNext(SR); if SizeLabel <> nil then begin {$IFDEF Delphi3Below} SizeLabel.Caption := 'Total size: ' + FloatToStr(TotalSize) + ' bytes'; {$ELSE} SizeLabel.Caption := 'Total size: ' + IntToStr(TotalSize) + ' bytes'; {$ENDIF} SizeLabel.Update; end; end; finally FindClose(SR); end; Result := TotalSize; end; //Aufruf - Beispiel: //TotalSize:=0; Label1.Caption := FloatToStr(DirSize('C:\Windows', nil, nil)) + ' Bytes'; //oder formatiert: //Label1.Caption := AddThouSeps(FloatToStr(DirSize('C:\Windows', scanlabel1, sizelabel1))) + ' Bytes'; |
Re: Does It Fit? Ein nützliches Brenntool
danke für den code, aber da ich delphi 6 nutze wird die größe in TSearchRec als int zurückgegeben, was bei großen dateien ja probleme bereitet, deshalb kann ich den code leider nicht nutzen :(
|
Re: Does It Fit? Ein nützliches Brenntool
Und schon gibt es ein neues Update :) auf Version 1.0.3, folgendes hat sich geändert:
- Berechnung der Verzeichnisgröße gefixed, stimmen nun mit dem Explorer über ein - Verzeichnisse mit Übergröße können nun nachträglich gescannt werden, kein Abbrechen mehr :!: - Ein paar interne Optimierungen - Ein Kontext-Menü in der Detail-Ansicht zum Löschen, öffnen und betrachten der Eigenschaften wurde hinzugefügt |
Re: Does It Fit? Ein nützliches Brenntool
** bump **
Wäre nett zur neuen Version ein wenig Feedback zu kriegen :) |
Re: Does It Fit? Ein nützliches Brenntool
Sehr gut. :thumb: Hab' nach'm kurzen Review keinen Fehler gefunden. Eventuell an eine Plugin-Schnittstelle für unterschiedliche Export-Formate gedacht? So könnte man die Zusammenstellung gleich als Nero-Projekt (oder halt für ein anderes Programm) abspeichern und dann einfach in Nero laden und Brennen. Wenn man das auf Plugins auslagert, müsstest du das nicht alles alleine schreiben. ;)
|
Re: Does It Fit? Ein nützliches Brenntool
1 Fehler entdeckt:
Größe der Zusammenstellung 4.486 MB (4.703.910.751 Bytes) = richtig! bei 'Ungenutzter Speicher' wird angezeigt: 3MB (3.409.057) = falsch, weil das DVD-Maximum um genau diese Größe überschritten ist! Ausnutzung in Prozent ist dann natürlich auch falsch: 99,93 % Fast perfekt: Ich möchte bei 'Ordner suchen' mit der Paste-Funktion einen Ordnernamen im Format "C:\dir\dir\dir" eingeben können... |
Re: Does It Fit? Ein nützliches Brenntool
@daniel, ja gute idee, ich könnte nen plugin-interface bauen mit dem man verschiedene exporter erstellen kann :thumb:
@hathor: dein Problem kann ich jetzt nicht nachvollziehen, ich habe testweise mir nen ordner erstellt mit 14gb daten, wobei jedes file circa 3-5mb groß war. Dann habe ich dif drüber laufen lassen, welches mir folgende ergebnisse lieferte: Zitat:
Habe aus Spass das ganze auch mal auf DVD gebrannt mit Nero (und einen Rohling geopfert ;) ) hat alles tadellos geklappt. Die Werte wie groß eine DVD ist habe ich Wikipedia entnommen. Meine Vermutung warum deine Zusammenstellung 3 MB zu groß ist, ist folgende: Du hast beim Zusammenstellen als Datenträger DVD-R (Minus) angegeben, dann aber versucht das Ganze auf einen DVD+R (Plus) Rohling zu brennen. Da herrscht nämlich ein Unterschied in der Größe von ungefähr 3 MB (auch auf Wiki nachzulesen). Wenn du also das Zusammenstellen erneut versuchst mit dem richtig ausgewählten Datenträger-Typen funktioniert es denke ich mal. Eine Verzeichniswahl mit Plain-Text respektive Clipboard wird es denke ich nicht geben, da ich den Auswahldialog komfortabel genug finde ;) |
Re: Does It Fit? Ein nützliches Brenntool
Du hast recht mit den unterschiedlichen Kapazitäten der DVD-R und DVD+R.
Nach erfolgter Zusammenstellung und nachträglicher Änderung des Datenträgers ändert sich aber nichts in der Anzeige. Man muss erst 'Erneut durchsuchen' anklicken - das könnte man bei Änderung des Datenträgers automatisieren. |
Re: Does It Fit? Ein nützliches Brenntool
Zitat:
Edit: Ist drin, wird beim nächsten Update dann verfügbar sein ;) |
Re: Does It Fit? Ein nützliches Brenntool
Zitat:
//Edit: Wenn die Funktion fertig ist, und ich dann noch Zeit habe, täte ich ein Plugin für ImgBurn basteln wollen. :stupid: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16: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