2017-03-13 54 views
0

我可以創建一個文本文件中使用的ofstream如下,到指定的路徑:的ofstream和ifstream的路徑作品用C++編寫不讀書生成器

std::string path = "c:\users\john\file.txt"; 
std::string str = "some text"; 

ofstream myfile; 
myfile.open (path); 
myfile << str; // write string to text file 
myfile.close(); //close file 

當我嘗試打開/讀取文件的系統似乎打開文件,但在這裏拋出「找不到數據」異常......即使文件在那裏幷包含文本。


std::string line = ""; 
std::string str = ""; 
std::string path = "c:\users\john\file.txt"; 

ifstream file (path); 
if (file.is_open()) 
{ 
    while (getline (file,line)) 
    { 
     str = str + line; 
    } 

    file.close(); 

    if (str == "") 
    { 
     throw(Exception("Error: No data found...")); 
    } 
} 

else 

throw(Exception("Error: File not found...")); 

這似乎只是試圖從非debug文件夾中的其他一些位置讀取時發生......

所以,如果我可以在用戶目錄下創建文件爲什麼不能我讀過了嗎?

誰能幫助?

UPDATE:

我剛剛發現,如果寫功能,運行和讀取功能之後,隨着應用程序仍在運行,它的工作原理運行。但是,如果寫入函數運行,則應用程序關閉並重新打開讀取函數,然後如上所述失敗。

+0

不應該這是'std :: string str =「一些文本」;'? –

+0

'std :: string path =「c:\ users \ john \ file.txt」;'應該是'std :: string path =「c:\\ users \\ john \\ file.txt」;'你也從不檢查'myfile.open(path);'是否在寫入時工作。 –

+0

什麼是getline?當你使用std :: prefix作爲其他stl結構時,缺乏std :: prefix讓我懷疑它是std :: getline還是定製的東西。可能有一個隱藏在那裏的錯誤。 – JeremiahB

回答

0

改爲使用一個正斜槓(/)。在文本文件

寫入操作都以同樣的方式進行,我們與COUT操作:

// reading a text file 
#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 

int main() { 
    string line; 
    ifstream myfile ("example.txt"); 
    if (myfile.is_open()) 
    { 
    while (getline (myfile,line)) 
    { 
     cout << line << '\n'; 
    } 
    myfile.close(); 
    } 

    else cout << "Unable to open file"; 

    return 0; 
} 

// writing on a text file 
#include <iostream> 
#include <fstream> 
using namespace std; 

int main() { 
    ofstream myfile ("example.txt"); 
    if (myfile.is_open()) 
    { 
    myfile << "This is a line.\n"; 
    myfile << "This is another line.\n"; 
    myfile.close(); 
    } 
    else cout << "Unable to open file"; 
    return 0; 
} 

從文件讀取,也可以在我們與CIN做了同樣的方式進行

+0

這是如何解決OP描述的問題的? –

+0

看到這一點,並非基本上更好。 –

+0

但我試過;)無論如何 –

0

你寫代碼靜靜地失敗,你應該改變,要

std::string path = "c:\users\john\file.txt"; 
std::string str = "some text"; 

ofstream myfile; 
myfile.open (path); 
if(myfile.is_open()) // <<<<<<< 
    myfile << str; // write string to text file 
} 
else { 
    std::cout << "Cannot open file." << std::endl; 
} 
myfile.close(); //close file 

您的主要PROBL EM是在字符串中的反斜槓需要轉義:

std::string path = "c:\\users\\john\\file.txt"; 
        //^ ^ ^

所以文件不能進行寫入操作可言,而你沒有注意到,因爲你的代碼從來沒有檢查它。

+0

可能值得在關於檢查'myfile << str'成功的註釋中折騰。 – user4581301

+0

@ user4581301當然,如果文件無法打開,那也會失敗。 –