2

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

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

我想问您,如果具有此名称的文件已经存在,或者因为已经存在此文件而什么都不做,那么此方法是否会用新值覆盖文件?如果该文件已经存在但具有旧值,我需要覆盖该文件。

4

2 回答 2

2

来自MSDN FileMode.Create

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

FileMode.Append 在哪里

如果文件存在,则打开文件并查找文件末尾,或创建一个新文件。这需要 FileIOPermissionAccess.Append 权限。FileMode.Append 只能与 FileAccess.Write 结合使用。试图在文件结尾之前寻找一个位置会引发 IOException 异常,并且任何读取尝试都会失败并引发 NotSupportedException 异常。

所以,你应该使用这个

pic = (byte[])myPicutureFromDatabase;
using (var fs = new BinaryWriter(new FileStream(filepath, FileMode.Create, FileAccess.Write)))
       {
          fs.Write(pic);
          fs.Flush();
          continue;
        }
于 2013-07-31T10:12:04.523 回答
1

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

于 2013-07-31T10:09:53.300 回答