2013-03-13 3 views
0

Как проверить, находится ли файл (ввод) в каталоге программы в C? Сначала я думаю, что могу просто открыть файл, но я не хочу, чтобы пользователь мог видеть мои другие файлы, введя что-то вроде ../important_dir/important_file, но, возможно, это нормально, если пользователь делает что-то вроде ./dir1/../file1. Это означает, что если файл находится в текущем каталоге (без дочернего каталога), нормально его открыть.Как проверить, находится ли файл в текущем каталоге в C?

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

Есть ли быстрый и безопасный способ сделать это?

ответ

0

Вы можете просто использовать stat(), чтобы проверить статус файла. Он вернет -1, если этот файл не существует, и установите errno на номер ENOENT.

char filename[] = "myfile"; 

struct stat s = {0}; 

if (!(stat(filename, &s) 
{ 
    if (ENOENT == errno) 
    perror("file does not exist."); 
} 
+0

Привет, Я пытаюсь не разрешить пользователю проверять мои файлы, которые не находятся в текущем каталоге, и кажется, что stat примет путь до тех пор, пока он действителен, поэтому он предоставит пользовательские файлы, такие как '../dir3/file4', чего я не ожидал. – user1537085

1

Я думаю, что настоящий путь должен выполнять работу. По возможности отправлю решение завтра.

+0

Да, сравните, что 'realpath()' разрешает для вопроса имени файла результат результата getcwd() '. – alk

Смежные вопросы