Проверьте наличие прав записи в файл в Windows / Linux

Я хотел бы знать, как проверить, есть ли у меня разрешения на запись в папку.

Я пишу проект на C ++ и должен напечатать некоторые данные в файл result.txt, но мне нужно знать, есть ли у меня разрешения или нет.

Отличается ли проверка между Linux и Windows? Потому что мой проект должен работать на Linux, и в настоящее время я работаю в Visual Studio.

Ответы на вопрос(3)

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

Решение Вопроса

роверить, удалось ли это. Если нет, иerrno (из шапки<cerrno> установлен в значениеEACCES [да, с одним S], тогда у вас не было достаточных разрешений. Это должно работать на обоихUnix / Linux а такжеWindows, Пример для stdio:

FILE *fp = fopen("results.txt", "w");
if (fp == NULL) {
    if (errno == EACCES)
        cerr << "Permission denied" << endl;
    else
        cerr << "Something went wrong: " << strerror(errno) << endl;
}

Iostreams будет работать немного по-другому. AFAIK, они не гарантируют, чтобы установитьerrno на обеих платформах, или сообщать о более конкретных ошибках, чем просто «сбой».

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

 Aviadjo26 сент. 2010 г., 20:32
Если я попытаюсь и у меня не будет никаких разрешений, я предполагаю, что программа рухнет, и я хочу предотвратить это, проверив ранее. есть ли команда для проверки прав записи на диск (запись нового файла)?
 Aviadjo26 сент. 2010 г., 20:30
спасибо, но я все еще не понимаю, как я могу знать, если у меня есть разрешения на запись файла на диск.
 jpo3821 дек. 2017 г., 08:30
@ChrisMaes: На самом деле, по крайней мере, под Windows, файл стирается, даже еслиfclose не вызывается ..... так что да, нужно использовать режим "а" (вместо "w"), чтобы проверить, доступен ли файл для записи, не уничтожая его!
 Matteo Italia26 сент. 2010 г., 20:57
Почему ваша программа должна рухнуть? : S
 iajnr22 нояб. 2013 г., 17:55
можно ли использовать _chdir (dirname), чтобы определить, доступна ли для записи папка или нет?
 Chris Maes15 февр. 2016 г., 15:24
Я бы порекомендовал использовать режим «а». Предположим, у вас есть права на запись и вы используете "fclose"; тогда существующий файл будет перезаписан пустым файлом ...
 BeniBela22 мар. 2013 г., 14:29
На самом деле это не очень хороший способ для Windows (по крайней мере, если вы хотите проверить, есть ли у вас разрешение на обновление приложения): работающий исполняемый файл всегда доступен только для чтения, даже если у вас было разрешение на запись, если оно было завершено; Если вы попытаетесь записать файл, Windows может создать его виртуальную копию в доступном для записи каталоге, даже если у вас не было разрешения на запись.

писи в файл. Причина этого в том, что разные платформы предоставляют разрешения на запись по-разному. Хуже того, только потому, что операционная система говорит вам, что вы можете (или не можете) записывать в файл, он может фактически лежать, например, в системе Unix, режимы файлов могут разрешать запись, но файл доступен только для чтения. media или, наоборот, файл может фактически быть символьным устройством, созданным ядром для собственного использования процессов, поэтому, даже если его файловые режимы установлены на все нули, ядро ​​позволяет этому процессу (и только этому процессу) работать с ним. все это нравится.

Ваш ответ на вопрос