gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:43:25 25 4
gpt4 key购买 nike

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

filepath /Desktop/file.txt

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

我使用 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.");
}

最佳答案

这应该可以做到。使用 fgets() 读取文件输入,并使用 strstr() 测试关键字。我使用 strtok() 将路径名与任何尾随换行符等隔离,但由于路径可以包含空格,因此我一直小心地独立检查前导空格。注意,不要忘记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.

关于检查文本文件中给定的文件名/路径中的文件是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29590887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com