2013-03-18 21 views
6

Voglio implementare una ricarica live di alcuni file. Suppongo che sia possibile leggere in qualche modo l'ultima modifica di un file. Questo potrebbe essere confrontato con l'ultima volta che ho caricato quel file. Terrei il secondo in memoriaCome scoprire se un file è stato modificato?

Come posso sapere se un file è stato modificato da un dato momento? La soluzione dovrebbe funzionare su Windows, Mac e Linux.

Aggiornamento: Sembra che la mia domanda abbia sollevato alcune interpretazioni errate. Per chiarire, sto chiedendo di scoprire se un file è stato modificato in generale. Usare il tempo dell'ultima modifica è stato ciò che mi è venuto in mente per la prima volta, ma sono aperto a qualsiasi altra soluzione! Purtroppo non posso permettermi di aprire ogni file e confrontarne il contenuto, visto che stiamo parlando di tutte le trame di un videogioco.

+1

Il concetto stesso di un ultima volta modificato non è portatile. –

+0

Windows ha almeno una chiamata API per informarti quando un file viene modificato. http://msdn.microsoft.com/en-us/library/aa365465(VS.85).aspx Forse il tuo altro SO di destinazione ha funzionalità simili. – RedX

+0

Le piattaforme SUS/POSIX/IEEE1003 hanno [stat] (http://pubs.opengroup.org/onlinepubs/009695399/functions/stat.html). Ma non esiste un modo C++ portatile. –

risposta

2

dai uno sguardo a Boost.FileSystem, std::time_t last_write_time(const path&). Disclaimer: Non sono sicuro di quanto portatile questo concetto sia

0

Utilizzare chiamate di sistema stat o fstat. Forniscono una struttura struct stat che contiene il tempo di modifica in st_atimespec.

+0

Questa piattaforma è indipendente? – danijar

+0

Se il toolkit MKS è installato su Windows allora sì, io credo di sì. – suspectus

+0

Non indipendente dalla piattaforma. In effetti, su molti sistemi è possibile disabilitare 'atime' su una base per filesystem. – MSalters

2

I problemi del file system dipendono solitamente dal sistema operativo. Ogni sistema operativo dispone di chiamate di sistema e/o funzioni di libreria per accedere a tali informazioni. Su Windows c'è la funzione GetFileTime, Unix/Linux offre stat, che dovrebbe funzionare anche per Mac. Forse Java offre qualcosa, ma qualsiasi altra cosa sarà difficile da ottenere usando solo la libreria standard. Google é il tuo migliore amico.

2

La classe QFileInfo fornisce informazioni sui file indipendenti dal sistema.

QDateTime QFileInfo::lastModified() const 

Restituisce la data e l'ora dell'ultima modifica del file.

Dovrebbe essere abbastanza portatile, poiché questa è l'intera idea di Qt. Windows, MacOS e Linux sono ufficialmente supportati.

+1

Sembra un po 'eccessivo usare una libreria così grande per questo piccolo compito. – danijar

+1

@sharethis - chi dice che devi usarlo solo per questo? Qt è riempito con un carico del treno di funzionalità portatile. BTW sembra essere l'unica soluzione portatile finora :) – dtech

+0

Sto sviluppando un gioco OpenGL, quindi non ho bisogno della maggior parte di questo framework. Ma grazie per la tua risposta, comunque! – danijar

Problemi correlati