我正在使用StreamWriter创建文件并将一些文本写入该文件。在某些情况下,我没有要通过StreamWriter写入的文本,但是在初始化StreamWriter时已经创建了该文件。
using (StreamWriter sw = new StreamWriter(@"C:\FileCreated.txt"))
{
}
目前我正在使用以下代码,当StreamWriter关闭时,检查FileCreated.txt内容是否为空,如果它是删除它。我想知道是否有比这更优雅的方法(也许是StreamWriter中的一个选项)?
if (File.Exists(@"C:\FileCreated.txt"))
{
if (new FileInfo(@"C:\FileCreated.txt").Length == 0)
{
File.Delete(@"C:\FileCreated.txt");
}
}
顺便说一下,我必须打开一个要编写的流才能检查是否有任何文本,因为代码中有其他逻辑。
答案 0 :(得分:1)
如果您希望逐位获取用户的输入,可以将源代码设置为StringBuilder,然后在完成后提交到磁盘
StringBuilder SB = new StringBuilder();
...
SB.AppendLine("text");
...
if(SB.Length > 0)
File.WriteAllLines(SB.ToString());
答案 1 :(得分:1)
延迟打开文件,直到第一个输出可以解决这个问题,但它可能会创建一个新问题(如果创建文件时出现了权限错误,您将无法找到,直到稍后,也许当操作员不再在电脑上。)
你目前的方法很不错。但是,如果你只是关闭了一个流,我就不会看到测试File.Exists
的必要性。还要考虑竞争条件:
另外考虑您可能有权创建文件,之后不要删除它!
正确执行此操作需要使用原始Win32 API,如I described in a previous answer。请注意,只要您指定等效的FILE_SHARE_WRITE
,就可以将.NET流用于第一个文件句柄。
答案 2 :(得分:0)
重新审视您的假设,即您在检查内容之前必须打开流。只需重新组织您的逻辑。