В моем приложении я пытаюсь переименовать папку, но если папка открыта в Windows Explorer, я добираюсь IOException
. Как я могу определить, открыта ли папка в Windows Explorer в C#?
Не можете сказать ничего конкретного о вашем коде, но посмотрите на образец XMLPerformance от Apple - он сравнивает производительность NSXMLParser и libxml - результаты определенно в пользу последнего. В одном из моих проектов переход с NSXMLParser на libxml дал большое повышение производительности, поэтому я бы предложил использовать его.
-121--4321139-Вероятно, вы не используете компилятор, соответствующий стандартам (или тот, который вы используете, настроен на совместимость с предстандартным кодом).
-121--4585793-поймать IOExeption?
Как говорили другие, просто постарайтесь сделать то, что вы хотите, поймайте исключение, если оно произойдет, и предпримите соответствующие действия, что бы ни было в вашем контексте.
У вас не так много выбора, как я вижу, подумайте:
bool iHaveAccess = CheckAccess(folder);
if (iHaveAccess)
{
RenameFolder(folder,newFolderName);
}
Что произойдет, если между тем, что StartAccess добьется успеха и вызовет RenameFolder, что-то еще заблокирует папку? Что тогда делать?
После небольшого поиска я нашел Это пост и Этот пост , который показывает различные методы для того, как вы можете программически определить, какой процесс заблокирован файл. Один из тех, кто должен позволить вам проверить, имеет ли проводник заблокирован папку.
Во многих крупных проектах используются некоторые Objective-C + +. Например, Camino, Chromium и Firefox представляют собой существенные проекты с открытым исходным кодом, включающие Objective-C + +.
-121--4648481-В вашей программе нет никаких функциональных проблем. Скорее всего, это проблема конфигурации между программой и почтовым сервером. Я бы попробовал следующее, чтобы диагностировать проблему.
Неразумно определять, есть ли у программы папка, открытая таким образом, что вы не можете ее переименовать. Потому что сразу после определения папки может начаться или прекратиться другой процесс. Вместо этого просто сделайте операцию и поймите результирующее исключение.
try {
Directory.Move("old","new");
return true;
} catch ( IOException ) {
return false;
}