2016-01-17 2 views
-1

У меня есть задача проверить, является ли файл пустым или нет.
Я хочу проверить файл до запуска моей программы, если файл не пуст. Я хочу, чтобы моя программа прочитала этот файл, но если файл пуст, я хочу, чтобы моя программа пропускала функцию.Как проверить, является ли файл пустым или нет с помощью C?

вот мой код, но он не работает:

void read_file() { 
FILE *f; 
f = fopen("contact.txt", "r"); 
fseek(f, 0, SEEK_END); 
if (ftell(f) != 0) { 
    while (!feof(f)) { 
     fscanf(f, "%[^\;];%s\n", contact[n].name, contact[n].number); 
     n++; 
    } 
} 
fclose(f); 
} 

ответ

5

У вас не хватает fseek(f, 0, SEEK_SET) т.е.

fseek(f, 0, SEEK_END); 
if (ftell(f) != 0) { 
    fseek(f, 0, SEEK_SET); 
    while (!feof(f)) { 
     fscanf(f, "%[^\;];%s\n", contact[n].name, contact[n].number); 
     n++; 
    } 
} 
1

Если вы работаете в среде, где он доступен, вы можете найти stat() syscall help. Например:

struct stat s; 

if (stat("contact.txt", &s) == -1) { /* an error occurred, check errno */ } 
else if (s.st_size == 0) { /* the file is empty */ } 
else { /* the file is not empty */ } 

stat manual page

+0

Я думаю, что 'stat' является POSIX, а не С. –

+0

Наверное правильно, - но я думаю, что большинство ОС есть он или его моральный equilivant –

+0

https://msdn.microsoft. com/en-us/library/windows/desktop/aa364955% 28v = vs.85% 29.aspx - если windows –