Создание поведения "Новый файл 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