gpt4 book ai didi

c - fopen() 返回 "No such file or directory"

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

我在 C 语言中使用 fopen() 函数时遇到一些问题。

我解析了目录并将所有路径放入字符数组(char**)。之后我应该打开所有这些文件。和...对于某些文件,fopen 返回“没有这样的文件或目录”。我真的不明白,为什么。

  1. 所有路径都是正确的。我查了一下。
  2. 我有所有特权 打开这些文件。
  3. 如果我从错误日志复制路径到文件并尝试 通过我的程序仅打开此文件 - 它有效。
  4. 其他 程序不适用于这些文件(我认为)。

我能做错什么吗?

int main(int argc, char *argv[]){
char** set = malloc(10000*sizeof(char*));
char* path = argv[1];
listdir(path, set); /* Just parse directory. Paths from the root. No problem in this function. all paths in the variable "set" are right */
int i=0;
while(i<files){ /* files is number of paths */
FILE* file = fopen(set[i++],"rb");
fseek(file, 0L, SEEK_END);
int fileSize = ftell(file);
rewind(file);
/*reading bytes from file to some buffer and close current file */
i++;
}
}

最佳答案

  1. 您将“i”递增两次。可能是误会了?
  2. 您可以使用 stat() 获取文件大小,而无需打开它。
  3. ftell() 返回“long”,不要将其转换为“int”,因为它可能会缩短并且会丢失正确的值。

试试这个代码:

#include <stdio.h>
#include <sys/stat.h>

/* example of listdir, replace it with your real one */
int listdir(const char *path, char *set[])
{
set[0] = "0.txt";
set[1] = "1.txt";
set[2] = "2.txt";
set[3] = "3.txt";
set[4] = "4.txt";

return 5;
}

int main(int argc, char *argv[]) {
int files;
char *path = argv[1];
char **set = malloc(1000 * sizeof(char *));

files = listdir(path, set);

for (int i = 0; i < files; i++) {
struct stat st;
stat(set[i], &st);
printf("FileSize of %s is %zu\n", set[i], st.st_size);
}
free(set);
}

关于c - fopen() 返回 "No such file or directory",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46235926/

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