Как проверить, могу ли я создать файл в определенной папке

Мне нужно знать, могу ли я создать файл в определенной папке, но есть слишком много вещей, которые нужно проверить, например, разрешения, дубликаты файлов и т. д. Ищу что-то вроде File.CanCreate(@"C:\myfolder\myfile.aaa"), но такого способа не нашел. Единственное, о чем я подумал, - это попытаться создать фиктивный файл и проверить исключения, но это некрасивое решение, которое также влияет на производительность. Вы знаете лучшее решение?

Обратите внимание, однако, что проверка того, можете ли вы создать файл (как бы это ни было сделано), а затем, позже, фактическое создание файла, все равно может привести к ошибке (здесь у вас есть состояние гонки). Таким образом, обычно лучше всего просто создать (окончательный) файл и обработать возможные ошибки / исключения.

Christian.K 25.11.2008 14:53

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

Pablo Retyk 25.11.2008 15:59
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
8
2
4 408
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

Гиды всегда удобны для случайных имен (чтобы избежать конфликтов) - что-то вроде:

string file = Path.Combine(dir, Guid.NewGuid().ToString() + ".tmp");
// perhaps check File.Exists(file), but it would be a long-shot...
bool canCreate;
try
{
    using (File.Create(file)) { }
    File.Delete(file);
    canCreate = true;
}
catch
{
    canCreate = false;
}

Я бы хотел сделать это без исключения, которое прерывает отладку (я мог бы сказать VS «скрыть» это, но я бы предпочел не делать этого). Есть способ?

CodeOrElse 26.03.2021 12:47

Вы можете использовать CAS, чтобы убедиться, что нет Политики .NET (caspol), ограничивающего создание и запись файла в этом месте.

Но это не распространяется на политики Windows. Вам придется вручную проверить политики NTFS. И даже тогда есть процессы, которые могут решить, что вам не разрешено создавать файл (например, антивирусный сканер).

Самый лучший и самый полный способ - это попробовать.

Другие вопросы по теме