Как узнать, почему renameTo () перестал работать?

Как другие сказали, используйте STL find или find_if функции. Но если Вы ищете в очень больших векторах, и это влияет на производительность, можно хотеть отсортировать вектор и затем использовать binary_search , lower_bound , или upper_bound алгоритмы.

30
задан H. Pauwelyn 18 December 2017 в 17:44
поделиться

2 ответа

Возможно, причина неудачного переименования в том, что файл все еще открыт. Даже если вы закрываете файл, он может оставаться открытым из-за (например):

  1. Дескриптор файла наследуется подпроцессом вашего процесса
  2. Антивирусная программа проверяет файл на наличие вирусов, и так что он открыт
  3. Индексатор (например, Google Desktop или служба индексирования Windows) открывает файл

Чтобы узнать, что держит файл открытым, используйте такие инструменты, как FileMon и Обработка .

Обновление: Инструмент, такой как Unlocker, может не помочь, если файл остается открытым только в течение очень короткого времени (как в случае антивирусного сканирования) . Однако, если javaw.exe отображается как открытый файл, это ваша проблема.

29
ответ дан 28 November 2019 в 00:16
поделиться

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

Поскольку это Windows, ошибка, скорее всего, указывает на то, что файл уже используется. Это может произойти, потому что он открыт другим процессом. Однако более вероятно, что ваш процесс либо не закончил его запись, либо вы забыли закрыть файл после того, как закончили его писать.

Также возможно, что вы указали неверный путь или предоставили несуществующий путь в конструктор File .

3
ответ дан 28 November 2019 в 00:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: