c# - 存在、读写只需一步

标签 c# file file-handling

我试图找出一个文件是否存在,如果存在,验证css样式是否已经存在,如果不存在,将它们写在文件末尾...

我已经完成了这一切,但分 3 个步骤:

该文件是否存在?

FileInfo fi= new FileInfo(Path.Combine(rootPath, "DefaultStyles.css");

如果是,我使用 TextReader 来获取内容

using (TextReader tr = new StreamReader(file))
{
    r = tr.ReadToEnd().Contains(".onebyonecard");
    tr.Close();
}

如果没有找到样式,我就写入它

using (TextWriter tw = new StreamWriter(file))
{
    tw.Write(cssStyle);
    tw.Close();
}

有没有一种方法可以通过一次简单的打开/关闭来完成此操作,而不需要一遍又一遍地打开文件?

最佳答案

好吧,您可以打开一个流进行读取和写入 - 但考虑到您正在读取整个文件,我个人只会打开它两次。请注意,您当前的代码将覆盖该文件,而不是附加到该文件。

我个人会使用 File 中的静态方法类:

// Elide this into the "if" condition if you want. I've separated it out here,
// but obviously it makes no difference.
bool present = File.Exists(path) &&
               File.ReadAllText(path).Contains(".onebyonecard);
if (!present)
{
    File.AppendAllText(path, cssStyle);
}

这比拥有读/写流并在其上创建 TextReaderTextWriter 更简单。

一些注意事项:

  • 通过分离文件访问,存在轻微的竞争条件风险。我们可以打开文件,读取内容,然后在决定下一步做什么时可以更新它。同样,当我们执行检查时,该文件可能存在,但在读取之前被删除。在大多数应用中,这种风险非常轻微,以至于无关紧要——只有您可以肯定地说。
  • 如果文件存在但相关用户无法读取/写入,或者正在被另一个进程使用,则上述代码仍可能引发异常。应用正常的异常处理风格 - 决定您认为可以在多大程度上从此类情况中实际恢复,并采取适当的行动。

关于c# - 存在、读写只需一步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7831824/

相关文章:

c# - 如何: *. csv -->行-->someArray-->修改

python - shutil 和复制文件

java - "' "is converting into "– “将一个文件的内容复制到另一个文件时

c - 读取不断增长的文件

c# - 将大文本文件加载到字符串中

c# - 安装 2 个独立的 NuGet 包,具有​​一个依赖但版本不同

javascript - 如何将 ASP.NET 中的内部 Javascript 设为外部

c - FILE I/O 和使用其中的数据出现问题

c - 为什么 fputc 不更新此代码段中的字符?

c# - 获取以逗号分隔的枚举整数列表