File.Move未处理的异常 - 文件已经存在

时间:2017-04-25 13:39:18

标签: c#

我正面临着应用程序执行某个过程的挑战,然后将文件移动到新目录。它工作正常,但如果找到一个具有相同名称的文件,我会得到一个未处理的异常。 如果文件已存在,我不想覆盖该文件,并且我不想给用户留言。如果文件已存在,我想将文件移动到NewDirectory并使用其他名称重命名该文件。 我尝试的解决方案从未捕获未处理的异常。 string NewDirectory =(@" D:\ Files \ edited \"); Directory.CreateDirectory(NewDirectory); string seconds = DateTime.Now.ToString(" -ss"); string NewName ="示例Txt" +" -2.2 - &#34 ;; string FullPath =(NewDirectory + NewName +" .txt"); if(File.Exists(FullPath)) {     File.Move(文件,NewDirectory + NewName + seconds +" .txt");     Console.WriteLine(NewName + seconds); } 其他     File.Move(文件,NewDirectory + NewName +" .txt"); Console.WriteLine(新名称); 异常截图

3 个答案:

答案 0 :(得分:0)

您可能正在尝试创建已存在的文件,因为您使用秒来追加。根据您调用此频率的频率,您可能尝试创建两个具有相同名称的文件。我会尝试使用完整的DateTime引用或任意递增的数字来追加。

此外,在连接文件路径时始终建议使用Path.Combine():尝试示例:

string NewDirectory = (@"D:\Files\edited\");
Directory.CreateDirectory(NewDirectory);
string seconds = DateTime.Now.ToString("-ss");
string NewName = "Example Txt" + "-2.2-.txt";
string FullPath = Path.Combine(NewDirectory, NewName);

if (File.Exists(FullPath))
{
  NewName = NewName + _SomeClassInteger + ".txt"
  File.Move(file, Path.Combine(NewDirectory, NewName));
  Console.WriteLine(NewName + seconds);
}
else
  File.Move(file, FullPath);

Console.WriteLine(NewName);

答案 1 :(得分:0)

您可以尝试使用随机名称创建目录。为此,请使用Path.GetRandomFileName()。然后使用一段时间检查文件是否存在。此外,我意识到你也移动文件,如果它不存在。是对的吗?也许那是你的问题

这是生成文件名的代码:

string NewName = Path.GetRandomFileName() + ".txt";
string FullName = Path.Combine(NewDirectory, NewName);

最好还使用Path.Combine()方法创建路径。

答案 2 :(得分:0)

不幸的是我仍然有例外。

我决定添加" DateTime.Now.ToString(" - ss")"到名称步骤以避免获得异常,或至少降低获取文件的可能性

string NewDirectory = (@"D:\Files\edited\");
Directory.CreateDirectory(NewDirectory);
string seconds = DateTime.Now.ToString("- ss");
string NewName = "Example Txt" + "-2.2-" + seconds;
    File.Move(file, NewDirectory + NewName + ".txt");
    Console.WriteLine(NewName);