У меня есть приложение, которое просматривает некоторые файлы для старых данных. Чтобы удостовериться, что мы не повреждаем хорошие проекты, я копирую файлы во временное местоположение. Некоторые каталоги, которые я проверяю, являются каталогами исходного кода, и у них есть .svn папки. Мы используем Подрывную деятельность для управления нашим кодом.
Как только я перерыл все файлы, я хочу удалить временный кэш. Звучит легким, правильно?
По некоторым причинам все мои .svn каталоги не удалят из кэша. Они разрушают приложение.
По причинам (слишком глубоко для входа здесь) я должен использовать временную папку, поэтому просто "сканируют исходный файл", вне рассмотрения по политическим причинам.
Я могу войти в проводник и удалить их.Нет проблем. Никакие предупреждения. Просто удаляет. Но катастрофические отказы кода с "Доступом к {файлу} отклонены". Я в своем конце остроумия с этим, таким образом, любая справка ценилась бы.
В то время как я упростил функцию НЕМНОГО ради Вашей исправности, код ДЕЙСТВИТЕЛЬНО об этом простом.
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 *, Ни одна из моей проверки даже НЕ ПЫТАЕТСЯ посмотреть на файлы подрывной деятельности. Мне действительно нужны они, как бы то ни было. Это - часть политического дерьма. Я должен показать, что КАЖДЫЙ файл был скопирован..., был ли он просканирован или нет.
И я понимаю то, что обычные подозреваемые для Файла. Удалить. Я понимаю то, что имеет в виду UnauthorizedAccessException. У меня нет доступа. Это - легкая задача. Но я просто скопировал файл. Как у меня НЕ может быть доступа к файлу?
* Обновите 3 *, ответ был во флаге "только для чтения". Вот код, я раньше фиксировал его:
foreach (string file in ListOfFilesToScan)
{
string newFile = file.Replace(oldRootPath, tempPath);
// This works just fine.
File.Copy(file, newFile);
//// NEW CODE ////
// Clear any "Read-Only" flags
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);
}
// ... do some stuff to the cache to verify what I need.
] Насколько я помню, Subversion отмечает файлы в своих подкаталогах .svn как доступные только для чтения.[
] [] Попробуйте сбросить атрибут "только для чтения" перед удалением файла. На самом деле я не знаю никакого C#, но быстрый Google предполагает, что это может сработать: [
]. [File.SetAttributes(file, FileAttributes.Normal);
] Единственная проблема, которую я вижу, будет в этой части:
// . ...сделайте кое-какие вещи с кэшем, чтобы проверить, что мне нужно.
Если вы все-таки откроете файл и забудете его закрыть, вы все равно будете иметь к нему эксклюзивный доступ, а значит, не сможете удалить его позже.
.Во-первых: "Крэш" означает исключение, верно? Какое? Можете ли вы его поймать и показать?
Второе: вы копируете репозитории подрывной деятельности, хотя вас не волнуют метаданные о подрывной деятельности? Именно об этом и идет речь в svn экспорте (в целевом каталоге нет каталога .svn)
Ответ на первый вопрос - то, что вам на самом деле нужно предоставить. Может быть, что-то захватывает .svn и блокирует некоторые файлы. Может быть, TortoiseSVN (чтобы дать вам красивые иконки оверлея...)?
.Не понимая, что вы так сильно хотите сделать, а как насчет хмодификации на 777 или 775. :-/
Правка:
Заметил, что вы на windows. Вам придется изменить разрешения. Не знаю, как это делают окна :-/
.]Похоже, что у вас нет доступа к удалению файла...[
] [] []Вышеуказанная ссылка говорит о том, что вы получаете []UnauthorizedAccessException[
], когда:[
] [] []вызывающий абонент не имеет требуемого разрешения. [
] []- или- [
] []- путь - это каталог.[
] []- или- [
] []- путь, указанный в файле только для чтения.[
] [
]- это один из них.[
]] Звучит как разрешение. Сложная проблема, хотя, очевидно, что у вас есть доступ на запись, если File.Copy уже работает....[
] []Единственное, о чем я мог подумать, это то, что файл все еще где-то открыт (как другие предлагали, возможно, в вашей [] части [] сделать что-то с кэшем).[
].