我正在使用StreamWriter对象写入由构造函数创建或已存在的文件。如果该文件存在,则它会附加数据。如果没有,那么它应该创建一个文件,然后附加数据。问题是当需要创建文件时,StreamWriter构造函数会创建文件,但不会将任何数据写入文件。
bool fileExists = File.Exists(filePath);
using (StreamWriter writer = new StreamWriter(filePath, true))
{
if (!fileExists)
{
writer.WriteLine("start");
}
writer.WriteLine("data");
}
编辑: 谢谢你的回答。 using块负责关闭writer。至于其他人说它适合他们,有什么信息我可以给你进一步诊断问题吗?该文件通过网络定位。这可能是一个潜在的问题。我不断地收到错误,“找不到路径的一部分......”和“指定的网络名称不再可用。”
答案 0 :(得分:1)
我的电脑上的代码运行正常。我们可以知道变量filePath包含的内容吗?也许你看错了文件......
更新:网络问题?也许某人正在网络的另一端做某事。尝试写入本地文件。如果有效,请尝试写入另一个位置的远程文件。
答案 1 :(得分:1)
好吧,所以我明白了。我的本地计算机在通过网络间歇性地访问文件时遇到问题。我将代码上传到服务器并在那里运行它没有任何问题。我非常感谢所有的帮助。对不起解决方案不是很令人兴奋。
答案 2 :(得分:0)
我的代码在3次运行之后对我有用:
start data data data
你确定,你没有尝试访问文件,由于某种原因你无法写入它吗?另外,为了确保在放置它之前放置writer.Close()
,尽管Dispose()
应该刷新数据。如果这样做无效,请尝试使用带有相应标记的File.Create()
手动创建文件。
//编辑: 我在我的机器上试过这个代码:
public unsafe static void Main() { string filePath = @"\\COMP-NAME\Documents\foo.txt"; FileStream fs = null; if (!File.Exists(filePath)) fs = File.Create(filePath); else fs = File.Open(filePath, FileMode.Append); using (StreamWriter writer = new StreamWriter(fs)) { writer.WriteLine("data"); } }
它运行顺利,可以试试这个吗?
答案 3 :(得分:0)
你的代码对我有用..
尝试使用声明
using (StreamWriter writer = new StreamWriter(filePath, true))
{
if (!fileExists)
{
writer.WriteLine("start");
}
writer.WriteLine("data");
writer.Flush();
}
答案 4 :(得分:0)
答案 5 :(得分:0)
与发布的其他人类似,您的代码在我的电脑上正常运行。
如果文件不存在,第一部分写入标题,第二部分写入数据,可能有助于您将代码分为两部分:
try
{
using (FileStream fs = new FileStream(filePath, FileMode.CreateNew))
{
using (StreamWriter sw = new StreamWriter(fs))
{
sw.WriteLine("start");
}
}
}
catch (IOException ex)
{
}
using (StreamWriter writer = new StreamWriter(filePath, true))
{
writer.WriteLine("data");
}