2015-04-26 34 views
-1

「您的任務是提示用戶輸入帶有磁盤路徑的文件名,如果該文件不存在於指定的位置,程序應該退出並顯示一條合適的錯誤消息」 大家好,所以這是我有一個問題,我是能夠得到用戶輸入一個文件名,這樣的..讓用戶輸入文件C++

1.   cout<< "enter the data file name you wish to open"; 
2.   cin >>file; 
3.   indata.open(file.c_str()); 
4.   outdata.open(file.c_str()); 

問題的第二部分是,如果文件不存在,該程序應該犯一個錯誤,我怎麼會這樣做,說我的文件名是txt.source,但用戶輸入lil.pol我怎麼說它有一個錯誤,或者其他的話我怎麼做使所需的文件名稱唯一的電腦將接受?

回答

1

你可以做的是嘗試打開該文件,如果無法通過std::cerr這樣打開問題的消息:

std::ifstream indata(file.c_str()); 

if(!indata) // failed to open 
{ 
    std::cerr << "Error: could not open file: " << file << std::endl; 
    return 1; // error code 
} 

// use indata here (its open) 
1

編輯:

讀/寫數據:

void createfile() 
{ 
    ofstream file_handle("test.txt"); 
    if (!file_handle) 
     return; 

    //add record: 
    file_handle << "firstname1" << endl; 
    file_handle << "lastname1" << endl; 
    file_handle << "college1" << endl; 
    file_handle << "1001" << endl; 

    //add another record: 
    file_handle << "firstname2" << endl; 
    file_handle << "lastname2" << endl; 
    file_handle << "college2" << endl; 
    file_handle << "1002" << endl; 

    //remember each record is 4 lines, each field is single line 
    //this is the file format 
} 

int main() 
{ 
    createfile(); 

    ifstream fin("test.txt"); 
    if (!fin) 
    { 
     cout << "file not found" << endl; 
     return 0; 
    } 

    ofstream fout("out.txt");//note, it's a different name than input file 
    if (!fout) 
    { 
     cout << "cannot create new file" << endl; 
     return 0; 
    } 

    char buffer[1000]; 

    while (fin) 
    { 
     cout << "attempting to read record:\n"; 
     for (int i = 0; i < 4; i++) 
     { 
      fin.getline(buffer, 1000, '\n'); 
      if (!fin) break; 

      cout << buffer << endl;//write to screen 
      fout << buffer << endl;//write to file 

      if (i == 3) 
      { 
       //buffer is expected to be a number! 
       int number = atoi(buffer); 
       //multiply by random number 2, just testing 
       cout << number * 2 << endl; 
      } 
     } 
    } 

    return 0; 
} 

只要創建一個循環,並要求輸入新的文件名是否錯誤。

int main() 
{ 
    ifstream indata; 
    string fname; 
    for (;;) 
    { 
     cout << "enter fname, zero to exit\n"; 
     cin >> fname; 
     if (fname == "0") 
      return 0; 
     indata.open(fname); 
     if (indata) 
      break;//file is valid and has been opened now 
     cout << "file not found, try again\n"; 
    } 

    return 0; 
} 
+0

所以這真的很有幫助,但它如何知道正確的文件名是什麼,因爲文件是一個字符串,我可以輸入不同的名稱,它會接受所有這些名稱。我想要文件名是特定的 –

+0

這是一個非常簡單的任務。 Galik的答案完全符合作業要求。如果文件名錯誤,則文件不在計算機上,打開操作失敗。沒有別的了。如果第一次出現錯誤,我會提出一個更加花哨的版本,要求重新進入,現在不要擔心。下一步是爲'outdata'創建一個文件。這次如果文件不在計算機上並不重要,程序將創建文件並準備好寫入。只要確保爲'outdata'輸入了不同的文件名。 –

+0

所以我想最讓我感到困惑的是,我有一個數據列表,名稱院校和一個數字,我試圖打開文件時輸出,我不明白如何讓他們輸出。此外,當我有indata.open(文件)打開是紅色的,不會工作 –