在Windows环境和多个应用程序中,当我们创建一个与现有文件同名的新文件时,系统不会提示用户输出文件已存在的消息,但会创建一个新文件( 1)在文件名末尾...
name.doc
将是
name(1).doc
我正在尝试在C#中创建相同的行为,我的问题是......我可以减少所有这些代码吗?
FileInfo finfo = new FileInfo(fullOutputPath);
if (finfo.Exists)
{
int iFile = 0;
bool exitCreatingFile = false;
while (!exitCreatingFile)
{
iFile++;
if (fullOutputPath.Contains("(" + (iFile - 1) + ")."))
fullOutputPath = fullOutputPath.Replace(
"(" + (iFile - 1) + ").",
"(" + iFile + ")."); // (1) --> (2)
else
fullOutputPath = fullOutputPath.Replace(
Path.GetFileNameWithoutExtension(finfo.Name),
Path.GetFileNameWithoutExtension(finfo.Name) + "(" + iFile + ")"); // name.doc --> name(1).doc
finfo = new FileInfo(fullOutputPath);
if (!finfo.Exists)
exitCreatingFile = true;
}
}
答案 0 :(得分:2)
我编写了一个Winforms控件来处理文件菜单实现的大部分细节。我不认为它使用较少的代码(虽然实现方式不同),但你可能想看看。
答案 1 :(得分:2)
如何(不添加围绕FileInfo构造函数的任何进一步的异常处理):
FileInfo finfo = new FileInfo(fullOutputPath);
int iFile = 1;
while (finfo.Exists)
{
finfo = new FileInfo(
Path.GetFileNameWithoutExtension(fullOutputPath) +
"(" + iFile + ")" +
Path.GetExtension(fullOutputPath));
iFile++;
}
// Optionally add fullOutputPath = finfo.Name; if you want to record the final name used