C как переименовать папку
Перейти к содержимому

C как переименовать папку

Как переименовать папку / каталог в C #?

Directory.Move не работает, поскольку папка (: \ temp \ Torename) уже существует.

Я ищу решение, которое не предполагает создания временной папки. У меня есть это решение: перейти во временную папку (уникальное имя), например, c: \ temp \ TorenameTemp Переместить из временной папки в новую папку. например, c: \ temp \ ToRename. Проблема в том, что моя папка может стать очень большой, и ее перемещение может занять некоторое время. Мне нравится решение Windows Explorer, в котором пользователь переименовывает на месте независимо от размера.

Спасибо за ваше время.

6 ответов

Файлы не будут перемещены, если вы не переместите их на другой том. Если место назначения находится на том же томе, изменится только имя каталога.

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

Решение 2020: вот мой метод безопасного переименования каталога.

Вот как это можно было сделать:

Первый параметр — это текущий каталог, второй параметр — новое имя каталога.

Осмотревшись в поисках полного решения, я заключил в этот служебный метод все советы / опасения.

Вы можете вызвать это простым:

В методе RenameDirectory содержится полный список всех возможных исключений, согласно тому, что я нашел в документации MSDN. Вы можете упростить их до одного блока try-catch (возможно, не рекомендуется) или изменить способ обработки исключений, но это должно помочь вам. Я также включил третий необязательный параметр, который позволяет вам подавлять исключения, если вы хотите, что просто вернет false вместо того, чтобы генерировать исключение. По умолчанию установлено значение false (т.е. не подавляет исключения).

Я не пробовал каждый путь для тестирования, но я был бы ОЧЕНЬ осторожен при переименовании диска, например «C: \» в «E: \». Вероятно, это вызовет исключение . но я не тестировал. 🙂

В целом, просто скопируйте / вставьте это решение и, возможно, удалите некоторые комментарии / ссылки на исследования, и оно будет работать.

File System. Rename(String, String) Метод

Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.

Переименовывает файл или каталог на диске. Функция My обеспечивает более высокие показатели производительности и быстродействия в операциях файлового ввода-вывода в сравнении с Rename . Для получения дополнительной информации см. FileSystem.

Параметры

Обязательный. Строковое выражение, указывающее имя и расположение существующего файла. Выражение OldPath может содержать имя каталога и метку диска для файла.

Обязательный. Строковое выражение, указывающее имя и расположение нового файла. Параметр NewPath может содержать имя каталога и метку диска для нового местонахождения файла. Имя файла, заданного параметром NewPath не может быть именем существующего файла.

Исключения

Файл OldPath не существует.

Нельзя переименовать с указанием другого диска.

Примеры

В этом примере функция используется Rename для переименования файла. В этом примере предполагается, что указанные каталоги уже существуют.

Комментарии

Функция Rename переименовывает файл и перемещает его в другой каталог, если это необходимо. Функция Rename может перемещать файл между дисками, но может переименовать существующий каталог только в том случае, если они NewPath OldPath находятся на одном диске. Rename не удается создать новый файл или каталог.

Rename Использование функции в открытом файле приводит к ошибке. Перед переименованием необходимо закрыть открытый файл. Rename Аргументы не могут включать подстановочные знаки с несколькими символами (*) и одинарными знаками (?).

При использовании Rename для копирования файла из незащищенного расположения в защищенное расположение файл сохраняет менее ограниченные права. Убедитесь, что вы не вводите возможный риск безопасности.

Переименование файлов

Как сделать такое задание: Перед каждым именем файла (regular file) вставить его номер (1, 2, 3 и т. д.). Номер выставляется в соответствии с тем, в каком порядке выдает результаты функция FindFirstFile, FindNextFile.

Смог сделать только это:

А как переименовывать файлы не понимаю

Для переименования файлов есть сишная функция rename()

Но учтите, что переименовывать файлы внутри цикла FindFirstFile / FindNextFile нельзя. Иначе цикл будет находить новые файлы.

Вам нужно в этом цикле сложить все имена файлов в массив, вызвать FindClose() , а потом пробежаться по этому массиву и переименовать файлы

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *