Delphi-PRAXiS
Seite 3 von 8     123 45     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Does It Fit? Ein nützliches Brenntool (https://www.delphipraxis.net/97357-does-fit-ein-nuetzliches-brenntool.html)

hathor 10. Aug 2007 11:51

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';

phlux 10. Aug 2007 15:23

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 :(

phlux 14. Aug 2007 11:00

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

phlux 15. Aug 2007 13:47

Re: Does It Fit? Ein nützliches Brenntool
 
** bump **

Wäre nett zur neuen Version ein wenig Feedback zu kriegen :)

Daniel G 15. Aug 2007 14:00

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. ;)

hathor 15. Aug 2007 15:05

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...

phlux 15. Aug 2007 22:52

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:

Größe der Zusammenstellung: 4.483 MB (4.700.368.303 Bytes)
Ungenutzter Speicher: 0 MB (4.689 Bytes)
Ausnutzung in Prozent: 100,00 %
Die Ungenauigkeiten erkläre ich jetzt mal durch Rundungsfehler :mrgreen:
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 ;)

hathor 16. Aug 2007 07:37

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.

phlux 16. Aug 2007 08:52

Re: Does It Fit? Ein nützliches Brenntool
 
Zitat:

Zitat von hathor
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.

Stimmt, das wurde hier auch schon mal bemängelt, werde ich umsetzen.
Edit: Ist drin, wird beim nächsten Update dann verfügbar sein ;)

Daniel G 16. Aug 2007 15:04

Re: Does It Fit? Ein nützliches Brenntool
 
Zitat:

Zitat von phlux
@daniel, ja gute idee, ich könnte nen plugin-interface bauen mit dem man verschiedene exporter erstellen kann :thumb:

Wäre ja im Prinzip nichtmal n großer Aufwand: Eine Funktion, an der dein Programm erkennt, dass es sich um eine Export-DLL handelt (Also für sowas wie 'n Handshake... Ich liebe den Begriff... Wenn's nach mir ginge, gäbe es für alles einen "Handshake". :mrgreen:) und eine Funktion, die ein Array mit den Dateipfaden zurückliefert. Feddisch. :mrgreen:

//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.
Seite 3 von 8     123 45     Letzte »    

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