2012-04-13 5 views
2
QFile file(filePath); 
QFileInfo fileInfo(file); 

file.open(QIODevice::ReadWrite); //or WriteOnly 

if(!fileInfo.isWritable()) 
{ 
    //Log error 
} 
else 
{ 
    //Save to file 
} 

Problem ist, Dateipfad hat vollen Zugriff, Datei erstellt und schreibbar und noch isWritable() gibt immer noch falsch zurück. Wenn ich die Schreibzugriffskontrolle entferne und einfach in die Datei schreibe, ist das Schreiben erfolgreich. QFile :: open gibt auch wahr zurück. Irgendwelche Ideen?QFileInfo :: isWritable() gibt false mit vollen Berechtigungen für Windows 7 zurück

Antwort

4

QFileInfo::isWritable() ist nicht für die Prüfung, ob eine geöffnete Datei beschreibbar ist, es ist die Berechtigung des aktuellen Benutzers für die Datei zu überprüfen. Wenn alles, was Sie sehen möchten, ist, ob der geöffnete Dateivorgang erfolgreich war, überprüfen Sie den Rückgabewert des Aufrufs QFile::open(). Wenn es wahr zurückgibt, ist die Datei schreibbereit. Führen Sie Ihre Fehlerbehandlung durch, wenn sie false zurückgibt.

Ich weiß nicht, warum isWritable() in Ihrem Fall fehlschlägt. Es kann sein, dass Windows denkt, dass die Datei geöffnet wurde und daher nicht von einem anderen open() Anruf beschreibbar ist. Wenn Sie die Berechtigung wirklich prüfen möchten, rufen Sie vor dem Öffnen der Datei isWritable() auf.

+0

Wenn Sie meinen Beitrag überprüfen, werden Sie sehen, dass ich bereits versucht, Rückgabewert von 'open()' zu überprüfen (gibt True zurück). Habe gerade versucht, 'isWritable()' aufzurufen, bevor ich die Datei öffne, gebe immer noch false zurück. Wenn das, was du sagst, wahr ist, dann werden meine Checks beim Aufruf von open() nicht fehlschlagen und alles wird wie beabsichtigt funktionieren. – krizajb

+0

Scheint, es funktioniert, diese Lösung ist auch Unix-kompatibel (getestet auf Ubuntu und Kubuntu). Vielen Dank. – krizajb

0

Versuchen Sie, Ihr Programm als Administrator auszuführen (mit der rechten Maustaste darauf klicken). Möglicherweise wird dieses Problem von der Benutzerkontensteuerung verursacht.

+0

Nein, schon versucht. – krizajb

+0

Was ist der vollständige Pfad der Datei? Welche Art von Benutzer ist Ihr Konto, normaler Benutzer oder Administrator? – Flynch