2016-07-02 44 views
5

Uno dei QIODevice reimplementato con i metodi open() in QFile ha un argomento QFileDevice::FileHandleFlag. Date un'occhiata alla documentazione per questo ci sono due opzioni con descrizioni contraddittorie.Qt auto chiude i file?

Dal QFileDevicedocumentation:

  • QFileDevice::AutoCloseHandle - Il file handle passato in open() dovrebbe essere chiuso da close(), il comportamento predefinito è che chiudono solo cancella il file e l'applicazione è responsabile della chiusura dell'handle del file. Quando si apre un file per nome, questo flag viene ignorato poiché Qt possiede sempre l'handle del file e deve chiuderlo.

  • QFileDevice::DontCloseHandle - Se non esplicitamente chiuso, l'handle di file sottostante viene lasciato aperto quando l'oggetto QFile viene distrutto.

così fa Qt auto chiudere i file o no e fa di questa opzione in realtà cambia qualcosa?

+3

DontCloseHandle è per quando l'applicazione fornisce un handle * precedentemente aperto * e porzioni Qt su di esso. In questo caso l'applicazione (non Qt) potrebbe voler mantenere la proprietà a vita. Confrontalo con "* Quando si apre un file per nome *, questo flag viene ignorato poiché * Qt possiede sempre l'handle del file * e deve chiuderlo." – user2864740

risposta

5

Dopo aver cercato la fonte Qt, ho trovato la riga in QFSFileEngine.cpp:378* che alla fine utilizza la bandiera.

QFile::open() possono essere passati un (stdio.h) FILE gestore esistente che non è stato creato da Qt e non dovrebbe essere automaticamente chiuso da Qt. I file in contrasto aperti da Qt vengono automaticamente chiusi da Qt.

Il flag QFileDevice::FileHandleFlag è per il primo caso e consente al programmatore di specificare se QFile deve chiudere automaticamente un file ignorando il fatto che non è stato aperto da Qt.


* Cerca closeFileHandle se il numero di riga non corrisponde.