Почему в Windows 7 происходит случайный сбой FileCopy? - PullRequest
3 голосов
/ 10 февраля 2010

У меня есть программа VB6, работающая на Windows 7. Она копирует большое количество файлов, и иногда FileCopy завершается ошибкой с нарушением прав доступа (между каждыми 60 и 500 файлами).

Я не могу воспроизвести его, используя один файл, только во время таких операций массового копирования возникает эта проблема.

Не имеет значения, если источник / цель находятся на жестких дисках, сетевых ресурсах или компакт-дисках.

Что может вызвать эту проблему?

РЕДАКТИРОВАТЬ: Мой вопрос может быть немного запутанным, поэтому вот еще некоторые данные:

Прогон 1:

  1. Начать копирование 5.000 файлов
  2. Нарушение прав доступа к файлу № 983
  3. Нарушение прав доступа к файлу # 1437
  4. Нарушение прав доступа к файлу # 1499
  5. Нарушение прав доступа к файлу # 2132
  6. Нарушение прав доступа к файлу # 3456
  7. Нарушение прав доступа к файлу # 4320
  8. Готово

Прогон 2:

  1. Начать копирование 5.000 файлов
  2. Нарушение прав доступа к файлу № 60
  3. Нарушение прав доступа к файлу # 3745
  4. Готово

Наблюдения

  • затронутые файлы всегда разные
  • Количество затронутых файлов имеет тенденцию к снижению, если один и тот же пакет файлов копируется несколько раз подряд.
  • Запуск от имени администратора не имеет значения
  • Приложение имеет доступ на чтение / запись ко всем необходимым объектам файловой системы
  • Эта проблема возникает только на рабочих станциях Windows 7!

Ответы [ 4 ]

4 голосов
/ 11 февраля 2010

Наилучшее предположение: возможно ли, что другой пользователь / приложение использует указанный файл во время выполнения процесса? (антивирусный сканер, средство индексирования поиска Win7, защитник Windows и т. д.). Вы можете попробовать загрузить компьютер в безопасном режиме, чтобы удалить все фоновые службы / приложения, и попытаться запустить процесс, чтобы увидеть его.

Есть ли согласованность в типах или размерах файлов, вызывающих проблему?

У машины мало ресурсов? ОЗУ / Дисковое пространство

Вы сказали, что это происходит на Win7 - это несколько компьютеров с Win7 или только одна. (помогите исключить системные ресурсы по сравнению с программным обеспечением / ОС)

Любые подсказки от средства просмотра событий (панель управления> инструменты администратора) - сомнительно

Требуется ли много времени для завершения? Если вы можете испытать снижение производительности, вы можете посмотреть на уничтожение и воссоздание объекта FSO после каждой копии или каждого X-файла, чтобы убедиться, что в Win7 / VB6 нет какой-то странной утечки памяти.

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

3 голосов
/ 10 февраля 2010

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

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

Действительно, больше данных - ключ, и регистрация - способ получить это.

2 голосов
/ 11 февраля 2010

Есть ли вероятность того, что ваша антивирусная программа или какой-нибудь индексатор будут мешать?

Попробуйте создать трассировку procmon при воспроизведении ошибки и посмотрите, что на самом деле дает сбой. С помощью трассировки вы можете увидеть, есть ли другая программа, вызывающая проблему, или ваше приложение пытается что-то написать, чего не должно быть (неправильные разрешения) или нет (каталог temp / scratch без достаточного места).

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

1 голос
/ 10 февраля 2010

Есть ли в каталоге скрытый / системный файл, который потенциально блокирует его?

Имеет ли значение запуск приложения VB6 с щелчком правой кнопкой мыши «Запуск от имени администратора»?

Это точка, где он умирает при максимальном количестве файлов в каталоге? например Вы уверены, что верхний предел для любой структуры цикла, которую вы используете в VB6, правильный (счет против счетчика -1)?

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