2017-01-08 4 views
0

это программа:C Еореп не создает новый текстовый файл, возвращает нуль, код ошибки 2

#include <dirent.h> 
#include <sys/types.h> 
#include <sys/stat.h> //mkdir 
#include <stdio.h> //printf 
#include <errno.h> //error number 
#include <unistd.h> //access 
#include <string.h> //strcat 

    int makeFile(){ 
     printf("\n- starting makeFile function -\n"); 

    DIR* dirstream = opendir("data"); 
    if(dirstream){ 

     if(access("data/records_file",F_OK) != -1){ 
      printf("\nfile exists!\n"); 
     }else { 
      //char cpath[1024]; 
      //getcwd(cpath, sizeof(cpath)); 
      //strcat(cpath,"/data/records_file.txt"); 
      //printf("\nfull path is : %s\n",cpath);   

      errno = 0; 
      FILE * fp = fopen("data/records_file.txt","r"); 
      printf("\nfile did not exist\n"); 

      if(fp == NULL){ 
       printf("\nfpen returned null, errno :%d \n",errno);  
      }else if(fp != NULL){ printf("\nmade file\n"); fclose(fp); } 
     } 

     closedir(dirstream); 

    }else if(ENOENT == errno){ 
     mkdir("./data",S_IRUSR|S_IWUSR); 
     FILE * fp = fopen("./data/records_file.txt","r"); 
     if (fp != NULL){ fclose(fp); } 
     printf("\ndirectory did not exist. make dir and file\n"); 
    } 

    printf("\n- leaving makeFile function -\n"); 
} 


int main(){ 
    makeFile(); 
} 

Im пытаясь сделать программу на языке C, который создает текстовый файл с именем «records_file» в каталоге «данные». Каталог «data» находится в рабочем каталоге, который содержит этот исходный код программы и exe.

программа сначала проверяет наличие файла и каталога данных и выводит строку, подтверждающую это, если это так. Это прекрасно работает. когда я удаляю текстовый файл из программы каталога данных, вызывает функцию fopen (Ive огляделся, и fopen, кажется, является стандартным способом создания файла - есть ли другой?)

но результат, возвращаемый функцией, равен нулю, а проверка errno Я вижу, что это 2, нет такого файла или каталога. Поэтому я удивляюсь, что я даю правильный путь. Я пытаюсь fopen (./ data/fileName.txt, «r»), fopen (data/filename) оба результата

Я пытаюсь получить текущий рабочий каталог и добавить к нему «data/filename.txt»:

char cpath[1024]; 
getcwd(cpath, sizeof(cpath)); 
strcat(cpath,"/data/records_file.txt"); 
printf("\nfull path is : %s\n",cpath); 

, а затем сделать:

FILE * fp = fopen(cpath,"r"); 

, но до сих пор получить код ошибки 2 на самом деле, если я пытаюсь сделать Еореп (justName.txt, «г») Я все еще получаю нуль возвращается и ошибка 2, так что должно быть что-то основное, что я потерял. Что можно сделать для создания файла и заставить его работать?

+2

Вы не можете 'fopen (...," r ")' несуществующий файл. Для этого вам нужно '' w ''или' ". – EOF

+0

Или даже «w +» для чтения и записи, но любой существующий файл уничтожен. –

ответ

1

Если вы хотите записать файл, как вы пытаетесь сделать по адресу:

FILE * fp = fopen("data/records_file.txt","r"); 

и

FILE * fp = fopen("./data/records_file.txt","r"); 

и

FILE * fp = fopen(cpath,"r"); 

Вы должны изменить "r" (для «читать») до "w" (для «записи») или "a" (для «добавить»). Вы можете узнать больше о fopen() на странице man page.

+0

Я также рекомендую для документации http://www.cplusplus.com –

+0

@GiuseppeLuigi Кажется, очень хорошо, я сделаю закладку. –

+0

изменение r на w сработало. Думал, что я проверил изменение второго аргумента, но я думаю, что нет – kanr