2012-03-04 112 views
0

我寫了下面的代碼來從文件中檢索數據(因爲我在Windows操作系統中已經存在並且給出了permision),並且創建了在列表中顯示數據片段的項目,但是列表不會顯示任何東西。更重要的是,即使文件沒有創建,FILE.EXISTS()函數也返回true。爲什麼這樣呢?QFile沒有打開

void MainWindow::on_listWidget_itemClicked(QListWidgetItem *item) 
{ 
    ui->listWidget_2->clear(); 
    QListWidgetItem *itm=new QListWidgetItem; 
    ui->commentbutton->setEnabled(true); 

    QFile files("E:/"+QString::number(ui->listWidget->currentRow())+"com.txt"); 

    if(files.exists()) 
    { 
     if(!files.open(QFile::ReadOnly | QFile::Text)) 
     { 
       QMessageBox::warning(this,"File Access!!!","The File containing data of  the Items and Comments can't be acessed",QMessageBox::Ok); 
       return; 
     } 
     QTextStream in(&files); 
     QString data(in.readLine()); 
     int x=0; 

     QString temp; 

     for(int i=0;;i++) 
      { 
      if(data.at(i)!='@' && data.at(i+1)!='#') 
      { 
       temp[x]=data.at(i); 
       x++; 
      } 
      else 
       if(data.at(i)=='@' && data.at(i+1)=='#') 
       { 
        x=0; 
        i++; 
        itm->setText(temp); 
        ui->listWidget_2->addItem(itm); 
       } 
      if(data.end()) 
       break; 
     } 
     files.close(); 
    } 

的路徑,在該文件生成顯示:0 & 1 are the files containing the data stored in items and 0com is the comment file associated with 0 item file

這是存儲在0com.txt文件(註釋文件)中的數據: 紐約@#倫敦@# 感謝您的時間!

+0

並沒有真正意義。你是如何確定代碼中生成的路徑實際上是你認爲的?你能更新你的代碼來顯示生成的路徑嗎? – Mat 2012-03-04 13:19:44

+0

這是一條固定路徑。我不改變這個文件存儲路徑。唯一改變的是與列表中的項目號碼相關,以便當前選擇的項目的註釋顯示在另一個列表中。 – scorpion 2012-03-04 13:23:11

+0

當open()失敗時,files.error()會返回什麼? http://qt-project.org/doc/qt-4.8/qfile.html#error – 2012-03-04 13:24:39

回答

2

1)0com.txt實際存在。對於ui->listWidget中當前的行號是否有「假」files.exists()? 2)data.end()返回一個STL風格的迭代器,而你正在通過索引遞增。使用

if(i>= data.size()) 
    break; 

3)請出示「0com.txt」的內容進行進一步的調試

+0

當我這樣做(i> data.size())break;該程序在顯示註釋時崩潰。 – scorpion 2012-03-04 14:15:05

+0

即使文件不存在,no files.exists()也不會變爲false。我不知道原因。 – scorpion 2012-03-04 14:16:36

+0

非常感謝您的建議,但現在程序加載註釋時程序崩潰。 – scorpion 2012-03-04 14:24:59