C#File.Delete不起作用

时间:2017-07-13 09:40:36

标签: c# .net file-io

我试图从单独的线程中删除目录中的某些文件,但有时删除不起作用。

DirectoryInfo dirInfo = new DirectoryInfo(Directory.GetCurrentDirectory());
FileInfo[] fileNames = dirInfo.GetFiles("*.*");
foreach (FileInfo fileName in fileNames)
{
    string destinationFilename = cncDestinationDirectory + @"\" + dirInfo.Name + @"\" + fileName.Name;
    if (File.Exists(destinationFilename))
        File.Delete(destinationFilename);

    File.Move(fileName.FullName, destinationFilename);
}

我的目标是在目录中移动一些文件,但据我所知,File.Move如果目标文件已经存在则不起作用。所以,我检查文件是否存在,如果是,我删除此文件,然后移动到原始文件。

File.Delete也会导致过早退出该功能。 当前目录与可执行文件正在运行的文件夹不同,因为我先前将其设置为另一个文件夹。

如何避免此错误?并仍然移动目标目录中的文件?

2 个答案:

答案 0 :(得分:1)

问题是由于文件的只读属性而拒绝访问该文件。

因此,我将所有文件属性设置为正常,如下所示:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div>
    <div class="same">Text</div>
    <div class="same">Text</div>
    <div class="same">Text</div>
    <div class="not-same">Stop here</div>
    <div class="same">Text</div>
    <div class="same">Text</div>
</div>

答案 1 :(得分:0)

您需要决定如何处理您在问题中建议的错误案例。完全有可能在检查文件存在然后删除它之前,该文件已被另一个进程打开。您可以捕获File.Delete周围的异常,然后如果它抛出则不移动原始文件,但最终会得到没有移动的文件。你无能为力。

DirectoryInfo dirInfo = new DirectoryInfo(Directory.GetCurrentDirectory());
FileInfo[] fileNames = dirInfo.GetFiles("*.*");
foreach (FileInfo fileName in fileNames)
{
    string destinationFilename = cncDestinationDirectory + @"\" + dirInfo.Name + @"\" + fileName.Name;
    try
    {
        if (File.Exists(destinationFilename))
            File.Delete(destinationFilename);

        File.Move(fileName.FullName, destinationFilename);
    }
    catch(IOException exception)
    {
        Console.WriteLine($"Can't move file { filename.FullName}");
    }
}