如果文件已在C#中具有相同位置,则始终创建新文件

时间:2011-03-11 09:05:31

标签: c# file

我使用下面的代码创建了一个新文件。但是如果文件已经存在,那么我需要创建一个带有另一个文件名的新文件。这可能吗?

FileStream fs = new FileStream(filePath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
BinaryWriter bw = new BinaryWriter(fs);

bw.Write(b);
bw.Close();
fs.Dispose();

我的文件保存位置相同。

4 个答案:

答案 0 :(得分:3)

如果您使用FileMode.CreateNew,如果该文件已存在,则会抛出异常。

  

<强> CreateNew
  指定操作系统应创建新文件。这需要FileIOPermissionAccess.Write。如果该文件已存在,则抛出IOException   http://msdn.microsoft.com/en-us/library/system.io.filemode.aspx

您可以将其与File.Exists一起使用以减少异常的可能性,但仅使用File.Exists会有问题。可以在存在的检查之间创建一个文件,然后打开它。如果文件不太可能存在(例如,您使用的是随机生成的名称),则完全跳过File.Exists检查。

答案 1 :(得分:1)

当然,您可以使用File.Exists(filePath)检查文件是否已存在,并在这种情况下选择其他名称。

答案 2 :(得分:0)

当然,您可以使用:

 int i = 0;
 while (File.Exists(filename))
 {
   i++;
   filename = filename + i.ToString();
 }
 // save the File

答案 3 :(得分:0)

string FileName = "FileName"; // This var will be edited to FileName(1), FileName(2) and so on...
string BaseFileName = "FileName"; // To prevent cases like "FileName(12345)", we 'reset' it by having a "base name". 
int i = 1;

while (File.Exists($"{Directory}/{FileName}.txt")) 
{
    i = i + 1;
    FileName = $"{BaseFileName}({i})"; 
}

可以通过这种方式解决问题,但我认为总体上可以通过某种方式优化该代码,不确定如何进行。