【问题标题】:BinaryWriter to overwrite an existing file c#BinaryWriter 覆盖现有文件 c#
【发布时间】:2013-07-31 10:08:37
【问题描述】:

要在我的掌上电脑的内存上写一张图片,我使用以下代码:

pic = (byte[])myPicutureFromDatabase;
using (var fs = new BinaryWriter(new FileStream(filepath, FileMode.Append, FileAccess.Write)))
{
    fs.Write(pic);
    fs.Flush();
    continue;
}

我想问你,如果同名文件已经存在,这个方法是否用新值覆盖文件,或者因为这个文件已经存在什么都不做? 万一该文件已经存在但具有旧值,我需要覆盖该文件。

【问题讨论】:

  • FileMode.Append 如果文件存在则追加数据,如果文件不存在则创建新文件。如果要覆盖文件,请使用 FileMode.Create

标签: c# jpeg binarywriter


【解决方案1】:

来自MSDN FileMode.Create

指定操作系统应该创建一个新文件。如果 文件已经存在,它将被覆盖。这需要 FileIOPermissionAccess.Write 权限。 FileMode.Create 是等价的 请求如果文件不存在,请使用 CreateNew; 否则,使用截断。如果文件已经存在但隐藏 文件,抛出 UnauthorizedAccessException 异常。

在哪里作为 FileMode.Append

如果文件存在则打开文件并查找文件末尾,或者 创建一个新文件。这需要 FileIOPermissionAccess.Append 允许。 FileMode.Append 只能与 文件访问。写入。试图在结束前寻求一个位置 文件抛出 IOException 异常,任何读取尝试都失败 并抛出 NotSupportedException 异常。

所以,你应该使用这个

pic = (byte[])myPicutureFromDatabase;
using (var fs = new BinaryWriter(new FileStream(filepath, FileMode.Create, FileAccess.Write)))
       {
          fs.Write(pic);
          fs.Flush();
          continue;
        }

【讨论】:

    【解决方案2】:

    不,它会附加行,您已通过编写FileMode.Append 指定它,您应指定FileMode.Create 以附加行(或如果不存在则创建一个新文件)

    【讨论】:

    • 谢谢,我在发布问题后立即找到了相同的解决方案。但是感谢您的快速响应。
    猜你喜欢
    • 1970-01-01
    • 2016-04-22
    • 2014-01-10
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 2010-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多