![]() |
Datei öffnen, speichern[Prob gelöst]
Hi Leute,
Ich habe ein Problem: Ich will eine Datei öffnen, etwas anhängen (nur einen Buchstaben oder sowas), dieses angehängte danach sofort wieder löschen und die Datei schließlich shcließen. Was soll das ganze werdet ihr euch fragen. Also: Ich habe eine Listbox voll mit Dateinamen. Innerhalb der Listbox kann man die Reihenfolge verändern. Wenn ich jetzt auf einen Button drücke, sollen die Dateien in der Reihenfolge wie sie in der Listbox stehen ihr Änderungsdatum haben, also der oberste das älteste. Ich habe schon versucht, das Datum der Datei zu ändern, habs aber nicht geschafft das Programm dazu zu bringen von einer bestimmten Datei das Änderungsdatum auf einen Wert zu bringen, damit es zwischen den 2 darüberliegenden Elementen liegt. OK das klingt jetzt sehr kompliziert, aber mir geht es im Prinzip nur darum eine Datei zu öffnen, etwas anzuhängen (nur etwas kleines), das daraufhin dann wieder zu löschen. MfG synex |
Re: Datei öffnen, speichern
OK ich hab das Problem anders gelöst
|
Re: Datei öffnen, speichern[Prob gelöst]
Und wie?
|
Re: Datei öffnen, speichern[Prob gelöst]
Es ging mir ja darum das Änderungsdatum der Dateien zu ändern so dass sie die Reiehnfolge haben wie in der Listbox.
Ich habe jetzt beim Drücken eines Buttons das Änderungsdatum jeder einzelnen Datei so geändert, dass siedie neue Reihenfolge haben. Also: Vorher: datei1 12.10.03 datei2 16.10.03 datei3 20.10.03 Jetzt datei2 an erste Stelle verschieben: Nachher: datei2 18.10.03 datei1 19.10.03 datei3 20.10.03 |
Re: Datei öffnen, speichern[Prob gelöst]
Hai synex,
poste hier doch einfach mal den relevanten Teil von deiner Lösung. Dann können andere (wenn sie die Suche verwenden) an deiner Lösung teilhaben. Die DP lebt zu einem großem Teil davon das alle die Sosse veröffentlichen mit denen ein Problem gelöst wurde. |
Re: Datei öffnen, speichern[Prob gelöst]
Diese beiden Prozeduren hab ich mir
![]()
Delphi-Quellcode:
Und so hab ich das in meinem Programm umgesetzt: (in der Listbox stehen die dateinamen mit Pfad in der endgültigen Reihenfolge)
//Dateierstellung etc ändern
function ChangeFileDate(const path: string; const Creation, LastAccess, LastWrite: TDateTime): Boolean; var hFile: THandle; ftCreationUTC, ftLastAccessUTC, ftLastWriteUTC: TFileTime; ftCreationLocal, ftLastAccessLocal, ftLastWriteLocal: TFileTime; stCreationLocal, stLastAccessLocal, stLastWriteLocal: TSystemTime; begin result := false; hFile := CreateFile(PChar(path), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0); if (hFile <> INVALID_HANDLE_VALUE) then try //Umwandlung von TDateTime in Systemzeitformat DateTimeToSystemTime(Creation, stCreationLocal); DateTimeToSystemTime(LastAccess, stLastAccessLocal); DateTimeToSystemTime(LastWrite, stLastWriteLocal); //Umwandlung von Systemzeitformat in lokales Dateizeitformat if (SystemTimeToFileTime(stCreationLocal, ftCreationLocal)) and (SystemTimeToFileTime(stLastAccessLocal, ftLastAccessLocal)) and (SystemTimeToFileTime(stLastWriteLocal, ftLastWriteLocal)) then begin //Umwandlung von lokalem Dateizeitformat in Weltzeit if (LocalFileTimeToFileTime(ftCreationLocal, ftCreationUTC)) and (LocalFileTimeToFileTime(ftLastAccessLocal, ftLastAccessUTC)) and (LocalFileTimeToFileTime(ftLastWriteLocal, ftLastWriteUTC)) then begin result:=SetFileTime(hFile, @ftCreationUTC, @ftLastAccessUTC, @ftLastWriteUTC); end; end; finally CloseHandle(hFile); end; end; //datei datum sachen auslesen function GetFileDate(const FileName: string; out Creation, LastAccess, LastWrite: TDateTime): Boolean; var hFile: THandle; ftCreationUTC, ftLastAccessUTC, ftLastWriteUTC: TFileTime; ftCreationLocal, ftLastAccessLocal, ftLastWriteLocal: TFileTime; stCreationLocal, stLastAccessLocal, stLastWriteLocal: TSystemTime; begin result:=false; hFile := CreateFile(PChar(FileName), GENERIC_READ, 0, nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0); if (hFile <> INVALID_HANDLE_VALUE) then begin try //Ermittlung des Dateidatums in UTC (Weltzeit) if GetFileTime(hFile, @ftCreationUTC, @ftLastAccessUTC, @ftLastWriteUTC) then begin //Umrechnung in Ortszeit if FileTimeToLocalFileTime(ftCreationUTC, ftCreationLocal) and FileTimeToLocalFileTime(ftLastAccessUTC, ftLastAccessLocal) and FileTimeToLocalFileTime(ftLastWriteUTC, ftLastWriteLocal) then begin //Umwandlung in Systemdatumformat if FileTimeToSystemTime(ftCreationLocal, stCreationLocal) and FileTimeToSystemTime(ftLastAccessLocal, stLastAccessLocal) and FileTimeToSystemTime(ftLastWriteLocal, stLastWriteLocal) then begin //Zuweisung der Rückgabewerte Creation := SystemTimeToDateTime(stCreationLocal); LastAccess := SystemTimeToDateTime(stLastAccessLocal); LastWrite := SystemTimeToDateTime(stLastWriteLocal); result:=true; end; end; end; finally CloseHandle(hFile); end; end; end;
Delphi-Quellcode:
Und das wars auch schon.
procedure TForm1.Button15Click(Sender: TObject);
var i:integer; datum,erstellt,geaendert,access:tdatetime; begin datum:=now-(listbox1.Count-i); //der Einfachheit halber ist der Datumsunterschied genau 1 Tag for i:= 0 to listbox1.Count-1 do begin getfiledate(listbox3.Items.Strings[i],erstellt,access,geaendert); //Daten auslesen changefiledate(listbox3.Items.Strings[i],datum,datum,datum); //und neue Daten setzen, Erstellungsdatum, LastAccess und LastWrite wird gleichgesetzt end; end; MfG synex |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz