Создание поведения "Новый файл Windows"

В среде 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;
  }
}

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

Я написал элемент управления Winforms, который обрабатывает большинство деталей реализации файлового меню. Я не думаю, что он использует меньше кода (хотя реализация отличается), но вы можете взглянуть.

FileSelect control

Другие вопросы по тегам