我使用下面的代码创建了一个新文件。但是如果文件已经存在,那么我需要创建一个带有另一个文件名的新文件。这可能吗?
FileStream fs = new FileStream(filePath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(b);
bw.Close();
fs.Dispose();
我的文件保存位置相同。
答案 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})";
}
可以通过这种方式解决问题,但我认为总体上可以通过某种方式优化该代码,不确定如何进行。