2

如果文件存在,我想先将其删除,然后再写入文件。这是代码:

try
{
    if (File.Exists("qwe.mp4"))
    {
        File.Delete("qwe.mp4");
    }
    File.WriteAllBytes("qwe.mp4", encodedDataAsBytes);                   
}

但是,当我运行程序时,它不会删除现有数据,而是将以前的数据附加到下一个数据。(第一个数据只有 2 秒,附加新数据后,它得到 4 秒)。但新数据无法读取,这意味着它只能在前 2 秒播放,而其他 2 秒无法读取。

我应该如何解决这个问题?我想永久删除现有文件并使用新数据创建一个新文件。

4

3 回答 3

4

File.WriteAllBytes()如果文件已经存在,则覆盖该文件,因此您无需显式删除它。

于 2012-10-20T08:56:28.797 回答
1

如果您希望覆盖现有内容,为什么不简单地创建一个文件流FileMode.Create这样

using (FileStream my_stream = new FileStream("filename.mp4", FileMode.Create, FileAccess.Write)) {
  using (BinaryWriter my_writer = new BinaryWriter(my_stream)) {
    my_writer.Write(my_data);
  }
}
于 2012-10-20T09:14:05.103 回答
1

您必须为File.ExistsFile.Delete包含文件的完整路径

您应该始终使用绝对路径来确保您正在查看正确的文件

public static bool Exists(
    string path
)

否则可能是文件被覆盖的情况File.WriteAllBytes因为它创建一个新文件,将指定的字节数组写入文件,然后关闭文件。

如果目标文件已存在,则将其覆盖。

于 2012-10-20T08:56:39.140 回答