如果没有文本可以通过StreamWriter写入,则丢弃(不创建)该文件
本文关键字:创建 文件 可以通过 文本 StreamWriter 写入 如果没有 | 更新日期: 2023-09-27 18:13:47
我正在使用StreamWriter创建一个文件,并将一些文本写入该文件。在某些情况下,我没有文本可以通过StreamWriter写入,但是当StreamWriter初始化时文件已经创建。
using (StreamWriter sw = new StreamWriter(@"C:'FileCreated.txt"))
{
}
目前我正在使用以下代码,当StreamWriter关闭时,检查filecreated.com txt内容是否为空,如果是删除它。我想知道是否有一个比这更优雅的方法(一个选项在StreamWriter也许)?
if (File.Exists(@"C:'FileCreated.txt"))
{
if (new FileInfo(@"C:'FileCreated.txt").Length == 0)
{
File.Delete(@"C:'FileCreated.txt");
}
}
顺便说一下,我必须先打开一个流来写,然后才能检查是否有文本,因为代码中有一些其他的逻辑。
如果您想从用户那里一点一点地获取输入,您可以将您的源代码设置为StringBuilder,然后在完成后提交到磁盘
StringBuilder SB = new StringBuilder();
...
SB.AppendLine("text");
...
if(SB.Length > 0)
File.WriteAllLines(SB.ToString());
延迟打开文件直到第一个输出可以解决这个问题,但它可能会创建一个新的文件(如果创建文件时出现权限错误,您将直到稍后才会发现,可能当操作人员不再在计算机上时)。
你现在的方法很好。我不认为有必要测试File.Exists
,但是,如果你只是关闭一个流到它。还要考虑竞争条件:
- 你发现文件是零长度
- 另一个进程写入文件
- 删除文件
还要考虑到您可能有创建文件的权限,而不是在创建后删除它!
正确地做到这一点需要使用原始的Win32 API,正如我在前面的回答中所描述的那样。请注意,第一个文件句柄可以使用. net流,只要指定等同于FILE_SHARE_WRITE
。
重新审视您的假设,即您必须在检查内容之前打开流。