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

Alle Fragen rund Antworten rund um die ACMP Client Commands und Container
Antworten
Benutzeravatar
ngottschalk
Beiträge: 293
Registriert: Mi Sep 08, 2010 12:57 pm

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.
Dateianhänge
Wrong search size result example__{46887843-8EE5-4F98-A6A1-E712D9AEC6E7}.sim
(98.1 KiB) 148-mal heruntergeladen
Mit freundlichen Grüßen

Niklas Gottschalk (gottschalk@zoller-usa.com)
IT Systems Administrator
Zoller Inc.
Benutzeravatar
JDoering
Beiträge: 89
Registriert: Mo Dez 15, 2008 3:45 pm

Hallo Niklas,

ergänze doch in den Units mal die "AagonFiles". ;-)
Jens Döring
Senior IT Support Engineer

support@aagon.com
http://www.aagon.de

Aagon GmbH
Lange Wende 33
D-59494 Soest
fon: +49-2921-789-200
fax: +49-2921-789-244
Benutzeravatar
ngottschalk
Beiträge: 293
Registriert: Mi Sep 08, 2010 12:57 pm

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) 7673 mal betrachtet
Dateianhänge
Wrong search size result example__{46887843-8EE5-4F98-A6A1-E712D9AEC6E7}.sim
(149.13 KiB) 155-mal heruntergeladen
Mit freundlichen Grüßen

Niklas Gottschalk (gottschalk@zoller-usa.com)
IT Systems Administrator
Zoller Inc.
Benutzeravatar
JDoering
Beiträge: 89
Registriert: Mo Dez 15, 2008 3:45 pm

Hallo Niklas,

wie groß (In Byte) wäre denn die Datei?
Jens Döring
Senior IT Support Engineer

support@aagon.com
http://www.aagon.de

Aagon GmbH
Lange Wende 33
D-59494 Soest
fon: +49-2921-789-200
fax: +49-2921-789-244
Benutzeravatar
ngottschalk
Beiträge: 293
Registriert: Mi Sep 08, 2010 12:57 pm

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) 7660 mal betrachtet
Mit freundlichen Grüßen

Niklas Gottschalk (gottschalk@zoller-usa.com)
IT Systems Administrator
Zoller Inc.
Benutzeravatar
JDoering
Beiträge: 89
Registriert: Mo Dez 15, 2008 3:45 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'));
Jens Döring
Senior IT Support Engineer

support@aagon.com
http://www.aagon.de

Aagon GmbH
Lange Wende 33
D-59494 Soest
fon: +49-2921-789-200
fax: +49-2921-789-244
Benutzeravatar
ngottschalk
Beiträge: 293
Registriert: Mi Sep 08, 2010 12:57 pm

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) 7650 mal betrachtet
Mit freundlichen Grüßen

Niklas Gottschalk (gottschalk@zoller-usa.com)
IT Systems Administrator
Zoller Inc.
Antworten