0

在 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;
  }
}
4

2 回答 2

2

我编写了一个 Winforms 控件来处理文件菜单实现的大部分细节。我不认为它使用更少的代码(尽管实现方式不同),但您可能想看看。

文件选择控件

于 2009-06-02T11:39:57.053 回答
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
于 2009-06-02T11:42:19.217 回答