Почему этот код умирает в Windows? - PullRequest
5 голосов
/ 29 ноября 2010

Я пытаюсь перенести некоторый код из Linux в Windows. Я действительно не очень разбираюсь в Windows, и поэтому я как бы летаю вслепую. Данный код пытается удалить некоторые каталоги, используя org.apache.commons.io.FileUtils

  // If the mergesegs worked, delete the segment dirs
    for (File file : segments.listFiles())
    {
        if (!file.equals(mergedSegFile))
        {
            LOG.debug("deleting segment dir " + file);
            FileUtils.deleteDirectory(file);
        }
    }

segments - это файл, как mergedSegFile. Он умирает с IOException "Unable to delete file: c:\www\tomcat\crawls\test\TestingCode.site\crawldir\segments\20101128194700\parse_test\part-00000\data".

Эти файлы были созданы предыдущим запуском той же программы (которая выполняет некоторое сканирование Nutch). Выполнение ls -l под cygwin показывает, что пользователь и группа указаны правильно, но значения perms равны 000.

Дополнительная информация:

  • dir ничего не говорит мне о разрешениях.
  • Я могу удалить каталог с помощью del в окне cmd.exe или rm -rf в окне Cygwin Bash.
  • Рассматриваемые файлы и каталог, в котором они находятся, были созданы ранее при том же запуске той же программы.
  • Компьютер работает под управлением Windows 7, поэтому я предполагаю, что это означает NTFS.

1 Ответ

3 голосов
/ 29 ноября 2010

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

Что нужно проверить:

  • Используется ли каталог или его содержимое приложением?
  • Является ли каталог или любой из его файлов доступным только для чтения? (Проверьте с помощью dir, а не ls).
  • Имеет ли каталог или какой-либо из его файлов специальные разрешения, а вы не являетесь администратором?
  • Кстати, это NTFS, я полагаю?
...