Как определить, открыта ли папка?

В моем приложении я пытаюсь переименовать папку, но если папка открыта в Windows Explorer, я добираюсь IOException. Как я могу определить, открыта ли папка в Windows Explorer в C#?

5
задан Austin Salonen 22 January 2010 в 15:54
поделиться

3 ответа

Не можете сказать ничего конкретного о вашем коде, но посмотрите на образец XMLPerformance от Apple - он сравнивает производительность NSXMLParser и libxml - результаты определенно в пользу последнего. В одном из моих проектов переход с NSXMLParser на libxml дал большое повышение производительности, поэтому я бы предложил использовать его.

-121--4321139-

Вероятно, вы не используете компилятор, соответствующий стандартам (или тот, который вы используете, настроен на совместимость с предстандартным кодом).

-121--4585793-

поймать IOExeption?

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

У вас не так много выбора, как я вижу, подумайте:

bool iHaveAccess = CheckAccess(folder);
if (iHaveAccess)
{
    RenameFolder(folder,newFolderName);
}

Что произойдет, если между тем, что StartAccess добьется успеха и вызовет RenameFolder, что-то еще заблокирует папку? Что тогда делать?

8
ответ дан 14 December 2019 в 01:08
поделиться
[11175781-

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

0
ответ дан 14 December 2019 в 01:08
поделиться

Во многих крупных проектах используются некоторые Objective-C + +. Например, Camino, Chromium и Firefox представляют собой существенные проекты с открытым исходным кодом, включающие Objective-C + +.

-121--4648481-

В вашей программе нет никаких функциональных проблем. Скорее всего, это проблема конфигурации между программой и почтовым сервером. Я бы попробовал следующее, чтобы диагностировать проблему.

  1. Перенесите код в блок try/catch и проверьте, содержит ли сообщение об исключении полезные данные
  2. Используйте 127.0.0.1 вместо localhost, чтобы исключить что-либо сумасшедшее
  3. Убедитесь, что SMTP-сервер работает на стандартном порту (25 Я считаю)
-121--4950744-

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

try {
  Directory.Move("old","new");
  return true;
} catch ( IOException ) {
  return false;
}
1
ответ дан 14 December 2019 в 01:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: