C# 流不可写(StreamWriter)
我正在尝试从IsolatedStorage上的文件中删除特定行,但仍从以下方法接收到“流不可写”:C# 流不可写(StreamWriter),c#,file,windows-phone-8.1,C#,File,Windows Phone 8.1,我正在尝试从IsolatedStorage上的文件中删除特定行,但仍从以下方法接收到“流不可写”: public async static void RemoveFavoriteFromFile(int id) { string favoriteFilename = Globals.FavoriteFilepath; StorageFolder local = Windows.Storage.ApplicationData.Current.LocalFolder; var
public async static void RemoveFavoriteFromFile(int id)
{
string favoriteFilename = Globals.FavoriteFilepath;
StorageFolder local = Windows.Storage.ApplicationData.Current.LocalFolder;
var folder = await local.GetFolderAsync("DataFolder");
var file = await folder.OpenStreamForReadAsync(Globals.FavoriteFilepath);
using (StreamReader sr = new StreamReader(file))
{
using (StreamWriter sw = new StreamWriter(file))
{
string line = null;
while ((line = sr.ReadLine()) != null)
{
if (String.Compare(line, id.ToString()) == 0)
continue;
sw.WriteLine(line);
}
}
}
}
在线使用(StreamWriter sw=新StreamWriter(文件))
有人能帮我吗
提前谢谢
编辑:我主要想请您建议我如何从现有文件中删除特定行,无论我已经创建了什么。对于我来说,理解的主要问题是,如何编写/编辑一个我首先需要阅读的文件以找到特定的行。同时读取和写入同一个文件总是一个坏主意 写入交换文件“filename\u swap.txt”。在完成整个文件的编写之后,删除原始文件并将“filename_swap.txt”重命名为原始文件(基本上替换它) 也可以将整个文件读入缓冲区,然后关闭文件。对所述缓冲区进行更改,然后再次打开文件进行写入。这一次,写入修改的缓冲区的全部内容
因此,让我们模块化您的程序
using System.Threading.Tasks;
// read the specific file into a string buffer
private async Task<string> ReadFileIntoBuffer(string fileName)
{
string buffer = ""; // our buffer
StorageFolder local = Windows.Storage.ApplicationData.Current.LocalFolder; // local folder
var folder = await local.GetFolderAsync("DataFolder"); // sub folder
// open the file for reading
using (Stream s = await folder.OpenStreamForReadAsync(fileName))
{
using (StreamReader sr = new StreamReader(s))
{
buffer = await sr.ReadToEndAsync();
}
}
// return the buffer
return buffer;
}
// write the string buffer to a specific file
private async Task<bool> WriteBufferToFile(string fileName, string buffer)
{
try
{
StorageFolder local = Windows.Storage.ApplicationData.Current.LocalFolder; // local folder
var folder = await local.GetFolderAsync("DataFolder"); // sub folder
// open the file for writing
using (Stream s = await folder.OpenStreamForWriteAsync(fileName, CreationCollisionOption.ReplaceExisting))
{
using (StreamWriter sw = new StreamWriter(s))
{
await sw.WriteAsync(buffer);
}
}
}
catch (Exception ex)
{
string error_message = ex.Message;
return false;
}
return true;
}
如果您在理解问题时遇到困难,通常最好将问题分解成更小的部分并从中进行调试。您不能同时从/向文本流进行读写,文件内容将混乱不堪。名称“OpenStreamForReadAsync”应该将该点带回家,该流只可读。不要试图找到一个“OpenStreamForReadWriteAsync”方法,它不存在。“为什么当我以只读方式打开流时,我不能向它写入”并不是一个真正可以接受的问题。请澄清您需要了解该错误消息的其他信息。如果您正在寻求帮助删除行-请更新您的问题,以便清楚您需要什么帮助以及您尝试了什么。感谢大家的澄清。我已经用附加问题编辑了我的原始帖子。
// New Delete Lines function based off your old one
private string DeleteLines(string input_buffer, int id)
{
string output_buffer = "";
using (StringReader sr = new StringReader(input_buffer))
{
while (true)
{
string line = sr.ReadLine();
if (line != null)
{
if (String.Compare(line, id.ToString()) == 0)
{
}
else
{
// add it to the output_buffer plus the newline
output_buffer += (line + "\n");
}
}
else
{
break;
}
}
}
return output_buffer;
}