|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Dec 2000
Città: Prov. Pordenone
Messaggi: 404
|
E Delphi ?....
Spero che qualcuno sia in forma per Delphi 4 -5
Allora:.. Devo fare un programmino che mi modifichi la data e l'ora di uno o più File e che nel FileListBox o un altro Oggetto mi si visualizzi anche la data e l'ora dei vari File ( insomma come WinCommander ). Spero di essere stato chiaro, anzi limpido. Ciao a tutti e un grazie ai Bravoni che mi aiuteranno.
__________________
Mio PC: Asus STRIX Z270OH Gaming / Intel CORE I5 7600 3.5GHZ LGA 1151 - Ram 16 GB Corsair - Scheda Grafica: ASUS Dual GeForce RTX 2060 EVO 6 GB GDDR6 - Monitor Samsung C24F396 Full HD 24" Stampante: Brother laser HL-3140CW |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Hmm... non mi ricordo quale chiamata Win32 API ti permette di farlo... devo fare una ricerca, se trovo qualcosa ti faccio sapere (credo Domenica).
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Dec 2000
Città: Prov. Pordenone
Messaggi: 404
|
Aspetto con fiducia Ciao
__________________
Mio PC: Asus STRIX Z270OH Gaming / Intel CORE I5 7600 3.5GHZ LGA 1151 - Ram 16 GB Corsair - Scheda Grafica: ASUS Dual GeForce RTX 2060 EVO 6 GB GDDR6 - Monitor Samsung C24F396 Full HD 24" Stampante: Brother laser HL-3140CW |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Allora, ancora non ho trovato esattamente come fare, ma è già un inizio: (per questioni di tempo ho potuto fare solo una ricerca al volo, ora!)
IN C/C++: Codice:
BOOL SetFileToCurrentTime(HANDLE hFile)
{
FILETIME ft;
SYSTEMTIME st;
BOOL f;
GetSystemTime(&st); // gets current time
SystemTimeToFileTime(&st, &ft); // converts to file time format
f = SetFileTime(hf, // sets last-write time for file
(LPFILETIME) NULL, (LPFILETIME) NULL, &ft);
return f;
}
Codice:
uses (...), Windows, (...);
(... altro ...)
function SetFileToCurrentTime(const hFile: Handle): Boolean;
var
ft: FILETIME; // o forse tagFILETIME
st: SYSTEMTIME; //o forse tagSYSTEMTIME
f: Boolean;
begin
//oopss... non ricordo più quale operatore restituisce un
//puntatore alla variabile... mi sembra sia "@"...
GetSystemTime(@st); // gets current time
SystemTimeToFileTime(@st, @ft); // converts to file time format
f := SetFileTime(hf, // sets last-write time for file
LPFILETIME(NULL), LPFILETIME(NULL), @ft);
Result := f;
end;
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Dec 2000
Città: Prov. Pordenone
Messaggi: 404
|
Eccomi
Ciao DanieleC88, scusami del ritardo:
ho provato a far funzionare il tuo esempio ma mi da qualche problema. Anche perchè non ho ancora capito bene il significato di 'function' e tutte le variabili interne. Per visualizzare l'ora sulla Form io ho fatto cosi circa: dichiaro la procedura: type ........... ................ ........ ................ procedure AppIdle(Sender: TObject; var Done: Boolean); procedure FormCreate(Sender: TObject); implementation Procedure TForm1.AppIdle(Sender: TObject; var Done: Boolean); // Aggiorna begin // l'ora e Label1.Caption:=FormatDateTime('hh.nn.ss - dd/mm/yyyy',Now); // la Data Done:=False; // Tiene aggiornato di continuo la data e l'ora end; {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin Application.OnIdle:=AppIdle; // Informa l'applicazione che il nome // dell'evento è in AppIdle end; procedure TForm1.AddItem(Name : String; Size : Integer; Time : Integer; Attr : Integer); var Item : TListItem; ShFileInfo : TSHFILEINFO; begin Item:=ListView1.Items.Add; Item.Caption:=Name; // --- Nome del File // --- Visualizza la Data e l'ora ( dopo la colonna Nome File ) Item.SubItems.Add(DateTimeToStr(FileDateToDateTime(Time))); end; end. Con qualche ritocco circa va; fatto + o - questo, devo modificare la data o l'ora del File. Ciao Mario
__________________
Mio PC: Asus STRIX Z270OH Gaming / Intel CORE I5 7600 3.5GHZ LGA 1151 - Ram 16 GB Corsair - Scheda Grafica: ASUS Dual GeForce RTX 2060 EVO 6 GB GDDR6 - Monitor Samsung C24F396 Full HD 24" Stampante: Brother laser HL-3140CW |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Mi devo scusare anche io, ora, per il ritardo... cmq, credo che vada bene anche quel DateTimeToStr(FileDateToDateTime(Time)) che hai usato, ma, sai, nel Delphi sono un po' arrugginito... se hai ancora bisogno di consigli, "fai un fischio".
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Dec 2000
Città: Prov. Pordenone
Messaggi: 404
|
Come si fa a modificare?
Adesso devo modificare la data o l'ora del File che seleziono e poi salvare le nuove modifiche.
Come devo Fare? Spero che qualcuno mi venga in AIUTOOO!! Ciao Mario.
__________________
Mio PC: Asus STRIX Z270OH Gaming / Intel CORE I5 7600 3.5GHZ LGA 1151 - Ram 16 GB Corsair - Scheda Grafica: ASUS Dual GeForce RTX 2060 EVO 6 GB GDDR6 - Monitor Samsung C24F396 Full HD 24" Stampante: Brother laser HL-3140CW |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Hmm... vedi che ti ho mandato io il codice, nella mia prima risposta. Devi usare l'API SetFileTime...
Codice:
BOOL SetFileTime(
HANDLE hFile, // identifies the file
CONST FILETIME *lpCreationTime, // time the file was created
CONST FILETIME *lpLastAccessTime, // time the file was last accessed
CONST FILETIME *lpLastWriteTime // time the file was last written
);
Codice:
typedef struct _FILETIME { // ft
DWORD dwLowDateTime;
DWORD dwHighDateTime;
} FILETIME;
Dove: - hFile corrisponde all'handle del file aperto (meglio usare un TFileStream, in modo da ottenere facilmente l'handle); - lpCreationTime corrisponde al tempo della creazione; - lpLastAccessTime corrisponde all'ultimo accesso; - lpLastWriteTime corrisponde all'ultima scrittura. Quindi, in Delphi basterà usare: Codice:
uses (...qualcosa...), Windows, (...qualcos'altro...);
//In una funzione o in una procedura:
var
FileAperto: TFileStream;
TempoCreazione: tagFILETIME;
TempoAccesso: tagFILETIME;
TempoScrittura: tagFILETIME;
begin
TempoCreazione.dwHighDateTime = (la data che ti serve, valore numerico);
TempoAdesso.dwHighDateTime = (la data che ti serve, valore numerico);
TempoScrittura.dwHighDateTime = (la data che ti serve, valore numerico);
SetFileTime(FileAperto.Handle, @TempoCreazione, @TempoAdesso, @TempoScrittura);
end;
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Dec 2000
Città: Prov. Pordenone
Messaggi: 404
|
Ci provo
Beh, intanto grazie per questo.
Provo e ti farò sapere se funziona. Io ho fatto qualcosa anni fa, ma non mi sono mai addentrato nei meandri della API di windows; anche perchè non ne avevo bisogno. Grazie ancora e a presto. Ciao Mario
__________________
Mio PC: Asus STRIX Z270OH Gaming / Intel CORE I5 7600 3.5GHZ LGA 1151 - Ram 16 GB Corsair - Scheda Grafica: ASUS Dual GeForce RTX 2060 EVO 6 GB GDDR6 - Monitor Samsung C24F396 Full HD 24" Stampante: Brother laser HL-3140CW |
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Re: Ci provo
Quote:
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Dec 2000
Città: Prov. Pordenone
Messaggi: 404
|
Mi riscuso del ritardo ancora
Ho provato ad usare il tuo consiglio ma mi da l'errore nell'ultima riga, dove c'è la @.
Le var sono state definite: TempoCreazione.dwHighDateTime = (la data che ti serve, valore numerico); TempoAdesso.dwHighDateTime = (la data che ti serve, valore numerico); TempoScrittura.dwHighDateTime = (la data che ti serve, valore numerico); SetFileTime(FileAperto.Handle, @TempoCreazione, @TempoAdesso, @TempoScrittura); dove io dovrei inserire la data, come dovrebbe essere scritta? E poi come faccio a vedere il risultato se è cambiato tramite una Label? Ultima cosa (per il momento) dove posso scaricare la guida sulle API di win. Ciao Mario PS: E non ti illudere che sia finita qui !!!
__________________
Mio PC: Asus STRIX Z270OH Gaming / Intel CORE I5 7600 3.5GHZ LGA 1151 - Ram 16 GB Corsair - Scheda Grafica: ASUS Dual GeForce RTX 2060 EVO 6 GB GDDR6 - Monitor Samsung C24F396 Full HD 24" Stampante: Brother laser HL-3140CW |
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Re: Mi riscuso del ritardo ancora
Quote:
Cmq, la guida alle API di Windows dovrebbe essere compresa col Delphi. Se la trovi nel CD (o comunque nel menu "?" del Delphi), non scaricarla, perchè è molto grande (~25 mega). Non so di preciso dove trovarla, ma cerca un po' in msdn.microsoft.com. Per quanto riguarda la data: la data è un valore numerico che nel Delphi ha come sottotipo "TDateTime" (cercalo nella guida del Delphi per maggiori informazioni). Provo a riscriverti la routine, dovrebbe andare così: Codice:
procedure ImpostaTempo(const Creazione, Scrittura: TDateTime);
var
FileAperto: TFileStream;
TempoCreazione: tagFILETIME;
TempoAccesso: tagFILETIME;
TempoScrittura: tagFILETIME;
begin
TempoCreazione.dwHighDateTime = Creazione;
TempoAdesso.dwHighDateTime = Now; //o qualcosa di simile
TempoScrittura.dwHighDateTime = Scrittura;
SetFileTime(FileAperto.Handle, @TempoCreazione, @TempoAdesso, @TempoScrittura);
end;
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Dec 2000
Città: Prov. Pordenone
Messaggi: 404
|
Questo
Per ultimo: mi spieghi che vuoi dire con "E poi come faccio a vedere il risultato se è cambiato tramite una Label" ?
Quando io modifico la data o l'ora, oppure le due cose contemporaneamente (data e ora), come faccio a vedere le modifiche con una label? Spero di essere stato chiaro. Proverò al più presto quello che mi hai scritto. Ciao e grazie ancora Mario
__________________
Mio PC: Asus STRIX Z270OH Gaming / Intel CORE I5 7600 3.5GHZ LGA 1151 - Ram 16 GB Corsair - Scheda Grafica: ASUS Dual GeForce RTX 2060 EVO 6 GB GDDR6 - Monitor Samsung C24F396 Full HD 24" Stampante: Brother laser HL-3140CW |
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Beh, nel tuo caso credo che la soluzione migliore sia creare una funzione apposita che aggiorna le data e l'ora. Se stai creando un programmino tipo Explorer, che ti faccia vedere data ed ora di ogni file (quando si usa la visualizzazione Elenco), allora questa è la migliore soluzione, in quanto la stessa funzione la potrai usare al caricamento di una cartella e per aggiornare le date in eltri eventi.
In questo caso, basta che tu chiami nuovamente questa funzione dopo aver cambiato data ed ora al file, e questa farà il resto.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Thoruno: hai la firma irregolare... Deve essere max 3 righe, la tua sono 4. Puoi correggere ? Grazie
|
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Dec 2000
Città: Prov. Pordenone
Messaggi: 404
|
........
Chiedo Venia
--------------------
__________________
Mio PC: Asus STRIX Z270OH Gaming / Intel CORE I5 7600 3.5GHZ LGA 1151 - Ram 16 GB Corsair - Scheda Grafica: ASUS Dual GeForce RTX 2060 EVO 6 GB GDDR6 - Monitor Samsung C24F396 Full HD 24" Stampante: Brother laser HL-3140CW |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:13.



















