Seite 1 von 1

Problem mit Form Editor / "Delphi" Script (TMS Scripter) beim Auslesen von Dateigrößen

Verfasst: Fr Jan 24, 2020 8:11 pm
von ngottschalk
Hallo Aagonauten,

ich bereite derweil ein CC für unsere Mitarbeiter vor, das u.A. die Größe von Ordnern benötigt. Hierfür wollte ich das eingebauten Attribute 'size' von TSearchRec nutzen; Zwar läuft der Code, die Ergebnisse sind aber vollkommen abwegig (u.A. negative Werte).
Folgender Code wird im Command zur rekursiven Berechnung einer Ordnergröße verwendet ("size" ist ein globaler Integer, CC hängt an):

EDIT: Sorry für die Formatierung, aber das Forum scheint meine Zeilenumbrüche in den Code-Tags zu entfernen, als normaler Text gehen wenigstens "nur" Einrückungen verloren.

procedure calcFolderSize(dir: String);
var search: TSearchRec;
begin
search := nil;
if FindFirst(dir + '*.*', [faDirectory, faHidden, faArchive, faAnyFile, faVolumeID, faSysFile, faReadOnly], search) = 0 then
repeat
if (((search.Attr and faDirectory) = faDirectory) and (search.Name <> '.') and (search.Name <> '..')) then
begin
showmessage('Found folder ' + dir + search.Name);
calcFolderSize(dir + search.Name + '\');
end
else
begin
if (((search.Attr and faDirectory) <> faDirectory) and (search.Name <> '.') and (search.Name <> '..')) then
begin
showmessage('Found file ' + dir + search.Name + ' Size: ' + IntToStr(search.Size));
size := size + search.Size;
end;
end;
until FindNext(search) <> 0;
FindClose(search);
end;

procedure Button1Click(Sender: TObject);
begin
calcFolderSize('C:\Temp\');
end;

Da ich den Fehler leider nicht ausfindig machen konnte, habe ich versucht, mittels der in "AagonFiles" implementierten Methode "GetFileInfo" (Signatur: procedure GetFileInfo(FileName: string; FailIfNoInfo: Boolean; VariableName: string);) umzusetzen, wofür folgender Code verwendet wurde:

procedure Button1Click(Sender: TObject);
var fname, test: String;
begin
fname := '<MeinDateiPfad>';
test := '';
GetFileInfo(fname,True,test);
showmessage(test);
end;

Dieser läuft aber leider in einen Laufzeitfehler:

---------------------------
Runtime error
---------------------------
File library FormUnit: GetFileVersionError when evaluating instruction CallProc ($33,$3,$13E493E8,$22684490,'GetFileInfo').

Stack content is: [Integer:439432832,Null,UnicodeString:C:].

Source position: 230,31
---------------------------
OK
---------------------------

Könnt ihr mir bitte helfen, meine Fehler zu finden, um im Form Editor Ordnergrößen berechnen zu können? Aus Laufzeitgründen wäre der erste Ansatz deutlich wichtiger.

Re: Problem mit Form Editor / "Delphi" Script (TMS Scripter) beim Auslesen von Dateigrößen

Verfasst: Mo Jan 27, 2020 9:16 am
von JDoering
Hallo Niklas,

ergänze doch in den Units mal die "AagonFiles". ;-)

Re: Problem mit Form Editor / "Delphi" Script (TMS Scripter) beim Auslesen von Dateigrößen

Verfasst: Mi Jan 29, 2020 8:51 pm
von ngottschalk
Hallo Jens,

wäre das Facepalm-Emoji verfügbar, würde ich es auf mich anwenden;) Aber auch mit der Unit in der uses-Klausel (überarbeitete Version im Anhang) bekomme ich falsche Ergebnisse:
Capture.JPG
Capture.JPG (43.89 KiB) 7824 mal betrachtet

Re: Problem mit Form Editor / "Delphi" Script (TMS Scripter) beim Auslesen von Dateigrößen

Verfasst: Do Jan 30, 2020 1:50 pm
von JDoering
Hallo Niklas,

wie groß (In Byte) wäre denn die Datei?

Re: Problem mit Form Editor / "Delphi" Script (TMS Scripter) beim Auslesen von Dateigrößen

Verfasst: Do Jan 30, 2020 4:30 pm
von ngottschalk
Hi Jens,

hier die Dateiinfo; Teilweise wird aber auch einfach eine Größe von 0 zurückgeliefert, z.B. bei einer 80MB msi Datei.
Capture.JPG
Capture.JPG (44.9 KiB) 7811 mal betrachtet

Re: Problem mit Form Editor / "Delphi" Script (TMS Scripter) beim Auslesen von Dateigrößen

Verfasst: Fr Jan 31, 2020 4:02 pm
von JDoering
Hallo Niklas,

bei dem Aufruf

GetFileInfo(fname,True,test);

ist der 3. Wert (test) der Name einer ACMPScript-Variable.
Ich habe das so getestet, das funktioniert einwandfrei:
GetfileInfo(Edit1.Text,true,'FILEINFO');
Showmessage(GetVarContent('FILEINFO.FileSize'));

Re: Problem mit Form Editor / "Delphi" Script (TMS Scripter) beim Auslesen von Dateigrößen

Verfasst: Fr Jan 31, 2020 6:27 pm
von ngottschalk
JDoering hat geschrieben: Fr Jan 31, 2020 4:02 pm Hallo Niklas,

bei dem Aufruf

GetFileInfo(fname,True,test);

ist der 3. Wert (test) der Name einer ACMPScript-Variable.
Ich habe das so getestet, das funktioniert einwandfrei:
GetfileInfo(Edit1.Text,true,'FILEINFO');
Showmessage(GetVarContent('FILEINFO.FileSize'));

Der Hinweis mit der ACMP-Variable war gut;) Ich bekomme jetzt zwar die Daten, aber ebenso einen Laufzeitfehler ('SIZE' ist jetzt eine ACMP-Variable):
Capture.JPG
Capture.JPG (272.81 KiB) 7801 mal betrachtet