Я программирую на C и пытаюсь написать переносимый код.
Мой вопрос: как я могу определить, существует ли файл и доступен ли для чтения?
В настоящее время я использую код:
f = fopen(filename, "r");
if (f) printf("File exists!");
В моей программе пользователь устанавливает filename
и должен рассматриваться как ненадежный ввод (например, filename
может быть злонамеренно создан).
Моя проблемачто приведенный выше код не является надежным.Например, при использовании в окнах с именем «PRN» будет напечатано «Файл существует!»хотя в файловой системе такого файла нет.
Я знаю, что могу отфильтровать зарезервированные имена файлов в Windows, поскольку их всего около десятка, но это похоже на взлом.Кроме того, я знаю только то, что знаю.Возможно, есть другие «зарезервированные» или «специальные» имена, о которых я не знаю.
Есть ли какой-нибудь простой и переносимый способ определить, существует ли файл в C?
В качестве альтернативы,если я должен использовать OS API, какую функцию я должен использовать?