我有一个名为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.");
}
答案 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.