从文本文件中给出的文件名/路径检查文件是否存在?

时间:2015-04-12 15:03:45

标签: c

我有一个名为test.txt的文本文件,其中包含以下文本:

  

filepath /Desktop/file.txt

我需要获取文件路径之后的路径,并检查该文件是否确实存在于文件系统中。

我已经使用strchr()和strtok()来提取" /Desktop/file.txt"从文本文件中使用与access()函数一起检查是否存在。然而,它实际上从未发挥过作用,并表示即使它确实存在,它也不会每次都存在。

以下是我的代码的一部分,试图让它发挥作用。

char *buffer = 0;
long length;
FILE *getfile;
getfile = fopen("test.txt", "r");

if (getfile){
    fseek (getfile, 0, SEEK_END);
    length = ftell (getfile);
    fseek (getfile, 0, SEEK_SET);
    buffer = malloc (length);
    if (buffer){
        fread (buffer, 1, length, getfile);
        }
    fclose (getfile);
}

char *getfilepath = (strchr(buffer, 'filepath') + 2);

int filepathexists = access(getfilepath, F_OK);

if(filepathexists == 0){
    printf("The file exists.");
} else {
    printf("File does NOT exist.");
}

1 个答案:

答案 0 :(得分:0)

这应该这样做。使用fgets()读取文件输入,并使用strstr()测试关键字。我使用strtok()来隔离路径名与任何尾随newline等,但由于路径可以包含空格,因此我一直小心地检查前导空格。注意,不要忘记free()你分配的内存。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>

int main(void)
{
    int filepathexists = 0;
    char *buffer, *sptr;
    const char *cue = "filepath";
    size_t length;
    FILE *getfile;
    getfile = fopen("test.txt", "r");
    if (getfile){
        fseek (getfile, 0, SEEK_END);
        length = ftell (getfile);                  // find file size
        fseek (getfile, 0, SEEK_SET);
        buffer = malloc (length + 1);              // allow for str terminator
        if (buffer){
            if (fgets(buffer, length + 1, getfile) != NULL) {
                sptr = strstr(buffer, cue);        // cue in correct place
                if (sptr == buffer) {
                    sptr += strlen(cue);           // skip past cue
                    while (*sptr == ' ')           // and leading spaces
                        sptr++;
                    sptr = strtok(sptr, "\r\n\t"); // isolate path from newlines etc
                    if (sptr) {
                        printf("The file is: %s\n", sptr);
                        if (access(sptr, 0) != -1) {
                            filepathexists = 1;
                        }
                    }
                }
            }
            free (buffer);
        }
        fclose (getfile);
    }

    if (filepathexists)
        printf("The file exists.\n");
    else
        printf("File does NOT exist.\n");
    return 0;
}

节目输出:

The file is: /Desktop/file.txt
The file exists.