2012-04-23 19 views
57

Bir dosyanın Qt içinde değil de belirli bir yolda olup olmadığını nasıl kontrol ederim?Dosyada Qt içinde var olup olmadığını nasıl denetlerim C++

Benim şu anki kod aşağıda:

QFile Fout("/Users/Hans/Desktop/result.txt"); 

if(!Fout.exists()) 
{  
    eh.handleError(8); 
} 
else 
{ 
    // ...... 
} 

Ama ben yolda söz dosya yok olsa bile handleError belirtilen hata iletisi vermiyor kodu çalıştırdığınızda.

+1

ben @mozzbozz aşağıda düşünüyorum kabul etmek unutmak düğünle/puan :) Styne666 @ – Rachael

cevap

1

ben hiç Qt bir şey kullanarak atlamak ve sadece access eski standart kullanır: Yayınladığınız

if (0==access("/Users/Hans/Desktop/result.txt", 0)) 
    // it exists 
else 
    // it doesn't exist 
+0

vermek Windows üzerinde farkında olmak 'access' - kesinlikle MS ve gcc portlarını destekler. Intel, destekleyen MS kitaplığını kullanır ve Comeau arka uç derleyicisinin kitaplığını kullanır. –

+0

Araştırmamı yaptığınız için teşekkür ederim. Bunun işe yarayabileceğini kabul ediyorum, fakat [bu cevap hakkındaki yorumlar] dikkate alındığında (http://stackoverflow.com/a/230068/594137) hala Qt seçeneklerine bağlı kalmayı düşünüyorum (bir Qt projeniz varsa) daha iyi bir çözüm. –

+2

@ Styne666: Eminim Qt, setuid/setgid programları için problemi çözmek için herhangi bir şey sağladığından emin değilim, ki bu sadece önemli olanla ilgili gibi görünüyor. “Çapraz platform” un ne anlama geldiğini ve hangi standartların dikkate alınacağını tartışıyorlardı, fakat sadece Qt tarafından desteklenen platformları önemsersek, bunlar çoğunlukla tartışma noktalarıdır. –

8

kod doğrudur. Şanslar başka bir şeyin yanlış olduğu. Bu koyarak

deneyin: En HandleError işlev içinde

qDebug() << "Function is being called."; 

. Yukarıdaki mesaj yazdırılırsa, başka bir şey sorun olduğunu bilirsiniz.

63

ben QFileInfo -sınıf (docs) kullanmak - bu onun için yapılmış tam olarak ne:

QFileInfo sınıf sisteminden bağımsız dosya bilgilerini sağlar.

QFileInfo dosya sisteminde bir dosyanın adını ve konumunu (yol) hakkında bilgi sağlar, bunun erişim hakları ve modifiye vb dosyanın boyutuna ve son bir dizin veya sembolik bağ, olup olmadığı okuma/kere de vardır mevcut. QFileInfo ayrıca bir Qt kaynağı olan hakkında bilgi edinmek için de kullanılabilir.

Bu

bir dosya var olup olmadığını kontrol etmek için kaynak kodu:

#include <QFileInfo> 

(tekabül #include -Bildirim eklemeyi unutmayın)

bool fileExists(QString path) { 
    QFileInfo check_file(path); 
    // check if file exists and if yes: Is it really a file and no directory? 
    if (check_file.exists() && check_file.isFile()) { 
     return true; 
    } else { 
     return false; 
    } 
} 

Ayrıca göz önünde bulundurun: mi sadece yolun mevcut olup olmadığını kontrol etmek ister (exists()) ya da bunun bir dosya değil, bir dizin olduğundan emin olmak istersiniz (isFile())?


TL (kod birkaç satır tasarruf yukarıdaki fonksiyonun kısa versiyonu ile,) DRveritabanı varsa ben de kontrol nasıl

#include <QFileInfo> 

bool fileExists(QString path) { 
    QFileInfo check_file(path); 
    // check if file exists and if yes: Is it really a file and no directory? 
    return check_file.exists() && check_file.isFile(); 
} 
+4

Sadece bir öneri, işlev bool fileExists (const QString & path) 'deki kod daha da basitleştirilebilir:' return checkFile.exists() && checkFile.isFile(); @mozzbozz – Dreamer

+0

@Dreamer Yorumlarınız için teşekkür ederiz. Tabii ki haklısınız, aynı zamanda bir tat meselesi de olsa. Sürümünüzü de ekledim (yeni başlayanlar için daha kolay takip edilebileceği için daha uzun süreyi burada bırakacağım). – mozzbozz

+1

Kod için teşekkürler! Ancak "isFile()" sonra bir kapatma dirseğini kaldırmanız gerekir. – Alex

4

:

#include <QtSql> 
#include <QDebug> 
#include <QSqlDatabase> 
#include <QSqlError> 
#include <QFileInfo> 

QString db_path = "/home/serge/Projects/sqlite/users_admin.db"; 

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); 
db.setDatabaseName(db_path); 

if (QFileInfo::exists(db_path)) 
{ 
    bool ok = db.open(); 
    if(ok) 
    { 
     qDebug() << "Connected to the Database !"; 
     db.close(); 
    } 
} 
else 
{ 
    qDebug() << "Database doesn't exists !"; 
} 

SQLite ile veritabanının var olup olmadığını kontrol etmek zordur, çünkü otomatik olarak oluşturur Varsa yeni bir veritabanı.

2

Sen QFileInfo::exists() yöntemi kullanabilirsiniz: -: Ben hangi her derleyici cevap olabilir

#include <QFileInfo> 
if(QFileInfo("C:\\exampleFile.txt").exists()){ 
    //The file exists 
} 
else{ 
    //The file doesn't exist 
}