File Existence Problem in C

Here is my code that checks if a file exists:

#include<stdio.h>
#include<zlib.h>
#include<unistd.h>
#include<string.h>


int main(int argc, char *argv[])
{
   char *path=NULL;
   FILE *file = NULL;
   char *fileSeparator = "/";
   size_t size=100;
   int index ;
   printf("\nArgument count is = %d", argc);

   if (argc <= 1)
   {
      printf("\nUsage: ./output filename1 filename2 ...");
      printf("\n The program will display human readable information about the PNG file provided");
   }
   else if (argc > 1)
   {
      for (index = 1; index < argc;index++)
      {
            path = getcwd(path, size);
            strcat(path, fileSeparator);
            printf("\n File name entered is = %s", argv[index]);
            strcat(path,argv[index]);
            printf("\n The complete path of the file name is = %s", path);
            if (access(path, F_OK) != -1)
            {
                  printf("File does exist");
            }
            else
            {
                  printf("File does not exist");
            }
            path=NULL;
      }
   }
   return 0;
}

When you run the command. / output test.txt test2.txt Output:

$ ./output test.txt test2.txt

Argument count is = 3
 File name entered is = test.txt
 The complete path of the file name is = /home/welcomeuser/test.txt
 File does not exist
 File name entered is = test2.txt
 The complete path of the file name is = /home/welcomeuser/test2.txt
 File does not exist

Now there is test.txt in the system:

$ ls
assignment.c  output.exe  output.exe.stackdump  test.txt

but test.txt is displayed as a file that does not exist.

Please help me sort it out here. Also, feel free to post any suggestions for improving the code / avoid mistakes.

Regards, Darkie

+3
source share
2 answers

Just because a call access()fails does not mean that the file does not exist. The call may fail for other reasons.

Use printf("error:%s\n", strerror(errno));to print the text of the error message.

- "", getcwd, . , , ... , .

getcwd() , . , . , . , . , getcwd .

+2

malloc() fpathconf() (, PATH_MAX).

asprintf().

, , , - .

malloc(), ( NULL).

:)

0

Source: https://habr.com/ru/post/1739400/


All Articles