Как я могу определить, существует ли файл? - PullRequest
0 голосов
/ 04 января 2019

Я программирую на C и пытаюсь написать переносимый код.

Мой вопрос: как я могу определить, существует ли файл и доступен ли для чтения?

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

   f = fopen(filename, "r");
   if (f) printf("File exists!");

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

Моя проблемачто приведенный выше код не является надежным.Например, при использовании в окнах с именем «PRN» будет напечатано «Файл существует!»хотя в файловой системе такого файла нет.

Я знаю, что могу отфильтровать зарезервированные имена файлов в Windows, поскольку их всего около десятка, но это похоже на взлом.Кроме того, я знаю только то, что знаю.Возможно, есть другие «зарезервированные» или «специальные» имена, о которых я не знаю.

Есть ли какой-нибудь простой и переносимый способ определить, существует ли файл в C?

В качестве альтернативы,если я должен использовать OS API, какую функцию я должен использовать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...