文件打开时移动或删除

时间:2018-02-06 14:18:57

标签: c#

是否可以使用如下语句移动/删除文件:

using (
    var fileStream = new FileStream(
        @"someShare\someFile.txt",
        FileMode.Open,
        FileAccess.Read,
        FileShare.None,
        512,
        FileOptions.None))
{
    // Here how to remove that file and then release stream? 
}

我想要实现的是在我的进程完成处理之后但在释放流之前将文件复制到存档。

如果我在使用语句后移动文件,我的代码的某些其他实例可能会锁定该文件。

FileOptions.DeleteOnClose不是一个选项,因为如果在使用语句中有任何异常我不想删除该文件

3 个答案:

答案 0 :(得分:3)

FileOptions.DeleteOnClose"表示文件在不再使用时自动删除"所以你可以这样做:

using (
    var fileStream = new FileStream(
        @"someShare\someFile.txt",
        FileMode.Open,
        FileAccess.Read,
        FileShare.None,
        512,
        FileOptions.DeleteOnClose
    )
) {
    // do something nice with the stream
}

请注意,如果其他进程(甚至您自己的进程)已经在其他位置打开了该文件,它将保持打开状态,直到关闭它的最后一个句柄。它不一定会在您完成后立即删除(但使用FileShare.None,您可以合理地确定唯一使用它的人,否则流不会已经开了。)

答案 1 :(得分:2)

您可以使用使用区块,但必须指定想要删除它。

using (FileStream stream = new FileStream(path, FileMode.Truncate, FileAccess.Write, FileShare.Delete, 4096, true))
{
    stream.Flush();
    File.Delete(path);
}

答案 2 :(得分:-3)

您不需要using阻止。只需使用System.IO.File.Delete

https://msdn.microsoft.com/en-us/library/system.io.file.delete(v=vs.110).aspx