我有兩個程序一起工作來寫入和讀取文件中的數據。文件讀取問題C++/C#
第一個程序是C#表單。它從用戶處獲取文件名並將其寫入C驅動器上的文件並退出/關閉C#應用程序。
Revelvant代碼:
private void startBtn_Click(object sender, System.EventArgs e)
{
using (StreamWriter writer = new StreamWriter("C:\\File.txt"))
{
writer.WriteLine(fileName.Text + ".txt");
writer.Close();
}
Application.Exit();
}
在C++中的第二程序。該程序僅在f10被按下時纔會創建C#應用程序,然後暫停直到C#應用程序關閉。然後,C++程序繼續並讀入寫入C驅動器文件的文件名。 C++程序是高度專業化/定製的,並且必須謹慎處理。
相關代碼:
std::string path("C:\\CSharpApp.exe");
system(path.c_str()); //Halts here until CSharpApp exits
if(!reader.is_open()) //Reader is a global ifstream object
{
reader.open("C:\\File.txt");
}
char temp[MAX_FILE_NAME];//250
reader >> temp;
reader.close();
string temp2 = temp;
//cout << temp2 << endl; //Using to debug
FileName = "C:\\data\\" + temp2;//temp2 contains a file name ending with .txt
if(!writer.is_open())//Writer is a global ofstream object
{
writer.open(FileName.c_str(),ios::app);
}
//write some stuff to file
writer.close();
按下F10鍵第一次調用C++代碼,並調用C#應用程序和文件的名稱正確保存。 C++程序在CSharpApp關閉並且文件名被正確讀取時恢復。
問題:
任何額外的F10按鍵導致表明TEMP2的COUT語句沒什麼價值,我只看到在控制檯中ENDL。 File.txt包含下一個文件的正確名稱,但由於某些原因,C++程序僅在首次按f10時才正確獲取文件名。
此功能的目的是按f10並在每次按f10時用新名稱創建一個新文件。
我不認爲這兩個程序都可以同時訪問該文件,因爲C#應用程序的執行會暫停C++程序。此外,我嘗試更改CSharp應用程序內的作者,以附加文件名而不是覆蓋文件。這導致C++應用程序將temp2打印爲僅作爲第一個文件名,並且沒有空白行。不知道這是什麼意思。
我目前正在努力解決這個問題,並會隨着我的進步而更新。
更新:
我添加了以下內容來代替:reader >> temp;
代碼:
if(reader >> temp)
cout << "Read in ok" << endl;
else
cout << "PROBLEM OCCURRED" << endl;
現在我的程序運行正常,但我不明白,爲什麼它現在的工作。對我來說,我假設如果測試和cout語句添加了這個,肯定會給程序更多的時間。
感謝您的幫助
你的意思是_reader是一個全球性的ifstream object_?建議檢查'reader.good()'和'if(reader >> temp)'以確保讀取成功。 – hmjd 2012-08-14 17:02:56
P.S.對於全局變量,文字字符串(例如:'path(「C:\\ CSharpApp.exe」);')和魔術數字(例如'char temp [250];'中的250) 。最好將這些文字字符串和幻數改成常量。 – MartyE 2012-08-14 17:42:50
@hmjd我加了if語句,它的工作原理,謝謝你的建議。正如我上面所說,我很困惑這是如何解決問題的。 – Brandon 2012-08-14 18:26:37