Franz Glaser schrieb:
> Bis jetzt kann ich mit meinem neugeschriebenen Programm einen gewählten
> Unterverzeichnisbaum in eine ListBox einlesen.
>
> Dann kann ich filenamen mit einem Mausklick auf eine Zeile die
> filenamen des gewählten Unterverzeichnisses in die zweite Listbox
> einlesen.
>
> Was ich brauche sind die "Attribute" der files in der Listbox2,
> besonders die Kalenderdaten, damit ich die files eventuell auf
> einen anderen PC übers Netz oder auf einen USB-stick übertragen
> kann.
>
> Daran scheitere ich hoffnunfslos. Es gibt zwar mehrere Funktionen
> und Prozeduren dafür aber keine davon bekomme ich unter Win10
> und unter Vista (das sind die 2 PCs) zum Laufen. Die Funktionen
> lierfern entweder -1 oder der Compiler verirrt sich mit den
> uses und includes. Auch der "Trick mit uses DOS" scheitert an
> meiner Unfähigkeit.
Dafür sollte SysUtil ausreichen.
Wenn Du die Dateien mir FindFirst/FindNext einliest, bekommst Du das
Änderungsdatum im Feld time des entsprechenden TSearchRec. Wenn Du nur
den Dateinamen hast, kannst Du die Funktion FileAge benutzen. Folgendes
funktioniert unter Windows 10 in einem Konsolenprogramm, Vista zum
Testen habe ich nicht:
program konsole4;
uses
SysUtils;
const pfad = 'd:\temp_d\';
var
Info: TSearchRec;
Count: longint;
NameLang : String;
begin
Count := 0;
if FindFirst(pfad+'*', faAnyFile, Info) = 0 then
begin
repeat
Inc(Count);
with Info do
begin
namelang := pfad+name;
if (Attr and faDirectory) = faDirectory then
begin
Write('VERZ : ');
write(DateTimeToStr(FileDateToDateTime(time)),' ');
write('------------------- ');
end
else
begin
Write('DATEI: ');
write(DateTimeToStr(FileDateToDateTime(time)),' ');
write(DateTimeToStr(FileDateToDateTime(FileAge(namelang))),' ');
end;
writeln(name);
end;
until FindNext(info) <> 0;
FindClose(Info);
end;
Write('Ende, weiter mit RETURN...');
readln;
end.
> Natürlich möchte ich die kopierten files auf das gleiche Datum
> usw. setzen wie das der Quelle aber unbedingt notwendig ist das
> nicht.
Das kann schwierig sein. Es gibt zwei Möglichkeiten, zumindest das
Änderungsdatum einzustellen
SysUtils - FileSetDate
LazFileUtils - FileSetDateUTF8
Die Funktionen stellen aber höchstwahrscheinlich nur die Zeit der
letzten Änderung ein. Das unter Windows üblicherweise benutzte
Dateisystem NTFS hat zusätzlich noch Zeiten für Dateierzeugung und
letzten Zugriff, wenn Du diese ändern willst, mußt Du wahrscheinlich die
Windows-API direkt aufrufen.
> Vorwiegend handelt es sich um eQSL-files, die ich mit 2 Computern
> mit den Jahren gespeichert habe und die sich jetzt überlappen
> sollen- Die Geschäftsfiles sind nicht mehr relevant. Aber der
> alte Vista fängt an mit Spirenzchen.
Nur als Anregung, weil ich mich damit nicht auskenne: Kannst Du bei dem
Format sicher sein, daß auf beiden Computern nicht zwei Dateien mit
selbem Namen, aber unterschiedlichem Inhalt existieren? Wenn nicht,
reicht ein einfacher Vergleich auf Dateiebene nicht aus, sondern Du mußt
in Deinem Programm den Inhalt der Dateien irgendwie miteinander
vergleichen.
Gruß Heiko
--
Jeder Zwang ist Gift für die Seele.
Ludwig Börne