У меня есть приложение, которое просматривает некоторые файлы для старых данных. Чтобы убедиться, что мы не повредили хорошие проекты, я копирую файлы во временное место. Некоторые из каталогов, которые я проверяю, это каталоги исходного кода, и у них есть папки .svn. Мы используем Subversion для управления нашим кодом.
Как только я просмотрел все файлы, я хочу удалить временный кеш. Звучит просто, правильно?
По какой-то причине все мои .svn-каталоги не будут удаляться из кеша. Они разбивают приложение.
По причинам (слишком глубоко, чтобы войти сюда), я должен использовать временную папку, поэтому просто "сканировать исходный файл" не может быть и речи по политическим причинам.
Я могу войти в проводник и удалить их. Нет проблем. Нет предупреждений. Просто удаляет. Но сбой кода с "Access to {file} запрещен". Я нахожусь на своем пути с этим, поэтому любая помощь будет оценена.
Хотя я упростил функцию LITTLE ради вашего здравомыслия, код ДЕЙСТВИТЕЛЬНО об этом прост.
List<string> tmpCacheManifest = new List<string>();
string oldRootPath = "C:\\some\\known\\directory\\";
string tempPath = "C:\\temp\\cache\\";
foreach (string file in ListOfFilesToScan)
{
string newFile = file.Replace(oldRootPath, tempPath);
// This works just fine.
File.Copy(file, newFile);
tmpCacheManifest.add(newFile);
}
// ... do some stuff to the cache to verify what I need.
// Okay.. I'm done.. Delete the cache.
foreach (string file in tmpCacheManifest)
{
// CRASH!
File.Delete(file);
}
код >
* Обновление *. Исключение составляет UnauthorizedAccessException. Текст - "Доступ к пути" C:\temp\cache\some-sub-dirs \.svn\entries 'отрицается. "
Это происходит под XP, XP-Pro и Windows 7.
* Обновление 2 * Ни одна из моих проверок даже ATTEMPTS не рассматривает файлы subversion. Мне они действительно нужны. Эта часть политического дерьма. Я должен показать, что КАЖДЫЙ файл был скопирован... если он был отсканирован или нет.
И я понимаю, что обычные подозреваемые для File.Delete. Я понимаю, что означает UnauthorizedAccessException. У меня нет доступа. Это нелегко. Но я просто скопировал файл. Как я могу получить доступ к файлу?
* Обновление 3 * Ответ был указан в "только для чтения". Вот код, который я использовал для его исправления:
foreach (строковый файл в ListOfFilesToScan)
{ string newFile = file.Replace(oldRootPath, tempPath);
// Это работает отлично. File.Copy(файл, newFile);
////NEW CODE//// // Очистить флаги "Только для чтения" FileInfo fi3 = new FileInfo (fn); if ((fi3.Attributes и FileAttributes.ReadOnly) == FileAttributes.ReadOnly) { fi3.Attributes = (FileAttributes) (Convert.ToInt32 (fi3.Attributes) - Convert.ToInt32 (FileAttributes.ReadOnly)); }
tmpCacheManifest.add(NewFile);
}
//... сделаем некоторые вещи в кеш, чтобы проверить, что мне нужно.
Код>