[英]c# how to end streamreader
我正在Uni中分配一個項目Windows窗體,我想搜索一個已經創建的文本文件以匹配名字和姓氏,然后在存在名字和姓氏的情況下寫一些附加信息。 我已經構建了代碼,並且沒有顯示任何錯誤,但是,當我運行並嘗試添加信息時,我看到的錯誤基本上是下一個進程(Streamreader writer無法訪問該文件,因為該文件已被另一個進程使用)。我假設此過程是streamreader,但我已嘗試對其進行編碼以停止讀取無濟於事。 我正在學習編碼的前三個月,如果可能的話,將不勝感激,我在下面提供了一段代碼。
//check if there is a file with that name
if (File.Exists(sFile))
{
using (StreamReader sr = new StreamReader(sFile))
{
//while there is more data to read
while (sr.Peek() != -1)
{
//read first name and last name
sFirstName = sr.ReadLine();
sLastName = sr.ReadLine();
}
{
//does this name match?
if (sFirstName + sLastName == txtSearchName.Text)
sr.Close();
}
//Process write to file
using (StreamWriter sw = new StreamWriter(sFile, true))
{
sw.WriteLine("First Name:" + sFirstName);
sw.WriteLine("Last Name:" + sLastName);
sw.WriteLine("Gender:" + sGender);
}
您正在使用相同文件在閱讀器內部使用書寫器。 在閉合花括號后,“使用”將對象放置在其中。
using(StreamReader reader = new StreamReader("foo")){
//... some stuff
using(Streamwriter writer = new StreamWriter("foo")){
}
}
這樣做:
using(StreamReader reader = new StreamReader("foo")){
//... some stuff
}
using(Streamwriter writer = new StreamWriter("foo")){
}
根據我對using語句的評論。 重新排列到下面。 我已經在本地測試過,它似乎可以正常工作。
using (StreamReader sr = new StreamReader(sfile))
{
//while there is more data to read
while (sr.Peek() != -1)
{
//read first name and last name
sFirstName = sr.ReadLine();
sLastName = sr.ReadLine();
//does this name match?
if (sFirstName + sLastName == txtSearchName.Text)
break;
}
}
using (StreamWriter sw = new StreamWriter(sfile, true))
{
sw.WriteLine("First Name:" + sFirstName);
sw.WriteLine("Last Name:" + sLastName);
sw.WriteLine("Gender:" + sGender);
}
我已經用break語句替換了sr.Close退出了。 關閉閱讀器會導致隨后的窺視器關閉時出錯。
另外,我注意到您未設置性別? 除非它在其他地方設置。 希望能有所幫助
您可以使用FileStream。 它為您提供了許多處理文件的選項:
var fileStream = new FileStream("FileName", FileMode.Open,
FileAccess.Write, FileShare.ReadWrite);
var fileStream = new FileStream("fileName", FileMode.Open,
FileAccess.ReadWrite, FileShare.ReadWrite);
我認為這就是您想要/需要的。 您無法以嘗試的方式將其追加到文件中。 相反,您將要閱讀輸入文件,並在閱讀時編寫一個臨時文件。 而且,只要您的生產線符合您的要求,就可以編寫您的修改內容。
string inputFile = "C:\\temp\\StreamWriterSample.txt";
string tempFile = "C:\\temp\\StreamWriterSampleTemp.txt";
using (StreamWriter sw = new StreamWriter(tempFile))//get a writer ready
{
using (StreamReader sr = new StreamReader(inputFile))//get a reader ready
{
string currentLine = string.Empty;
while ((currentLine = sr.ReadLine()) != null)
{
if (currentLine.Contains("Clients"))
{
sw.WriteLine(currentLine + " modified");
}
else
{
sw.WriteLine(currentLine);
}
}
}
}
//now lets crush the old file with the new file
File.Copy(tempFile, inputFile, true);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.