Sascha Manns Ответов: 1

Как создать специальный каталог


В настоящее время я пытаюсь создать каталог:

string appDocsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
string lcvDocsPath = Path.Combine(appDocsPath, "latex_curriculum_vitae", "Attachements", "Letter_of_Application");
Directory.CreateDirectory(lcvDocsPath);


Но грустно мне становится:

System.IO.FileNotFoundException: "Could not find file 'C:\Users\Sasch\OneDrive\Dokumente\latex_curriculum_vitae\Attachements\Letter_of_Application'."


Но почему же возникает эта ошибка?

Правка: я это выяснил. В то же самое время, когда моя программа пытается добавить упомянутый каталог, появляется Защитник Windows, и я должен вручную разрешить доступ к каталогу документов.
Можно ли это обойти?

Что я уже пробовал:

Я посмотрел там Я использовал его точно так же.
То же самое говорит и документация

Richard Deeming

Каталог.CreateDirectory[^] не задокументировано как бросание FileNotFoundException Вы уверены, что именно эта строка создает исключение? Вы проверили, какие части пути существуют?

Sascha Manns

Я это выяснил. В то же самое время, когда моя программа пытается добавить упомянутый каталог, появляется Защитник Windows, и я должен вручную разрешить доступ к каталогу документов.
Можно ли это обойти?

Richard MacCutchan

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

Sascha Manns

Я проверил его. Похоже, что я добавил каталог OneDrive/Documents в список отслеживаемых каталогов Defenders. Поэтому защитник блокирует его.
Включена ли эта функция в новой системе?

1 Ответов

Рейтинг:
9

Afzaal Ahmad Zeeshan

Я не уверен, что Защитник Windows попытается предотвратить создание папки в папке Documents/Downloads; он должен требовать повышенного доступа или защиты при работе с программными файлами или другими конфиденциальными папками.

Я бы хотел, чтобы вы подумали о том, что если Защитник Windows может помешать вам создать эту папку, он сделает то же самое для компьютеров ваших пользователей. Вы согласны с тем, что ваш процесс будет остановлен из-за этого, и вы думаете, что ваши пользователи будут делать то же самое; создайте или разрешите для себя каталог самостоятельно?

Цитата:
C:\Users\Sasch\OneDrive\Dokumente <-- часть OneDrive здесь
Наконец, вы создаете папку не в папке документов машины, а в OneDrive. Я думаю, вы должны понять, почему ваш компьютер создает каталог на OneDrive, так как именно поэтому Защитник Windows или другие программы отказывают в доступе. Это может быть связано с тем, что разрешение такой операции будет стоить пользователю их облачного хранилища, которое Microsoft должна предотвратить.

Если это не сработает, попробуйте использовать переменные Windows (%USERPROFILE%) для доступа к каталогу документов на ПК; не в сети.

Environment.ExpandEnvironmentVariables(String) Метод (System) | Microsoft Docs[^]

Редактировать
О, и если вы действительно не хотите позволить пользователю получать доступ/изменять/обрабатывать данные вне вашего приложения, почему бы не использовать локальное хранилище приложения для папки? Я бы рекомендовал использовать LocalApplicationData в качестве точки входа для таких операций ввода-вывода.

Попробуйте это перечисление, чтобы узнать другие возможные имена папок, к которым ваше приложение может получить доступ и использовать, Окружающая среда.Перечисление Специальных Папок (System) | Microsoft Docs[^]


Richard MacCutchan

Microsoft (в своей мудрости) изменила Windows так, что мои документы по умолчанию находятся в OneDrive в эти дни. И это не должно вызывать защитника, так как он принадлежит пользователю. На самом деле, я только что проверил это сам, и это прекрасно работает, создавая каталог на OneDrive.