gpt4 book ai didi

c - 使用 lseek 在 C 中获取文件的大小?

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

我正在尝试通过以下操作获取 C 中文件的大小...我是 C 新手

这是我的文件顶部的结构内存:

struct mem {size_t size;
};

这是局部变量/返回语句等的正确设置吗?

struct mem* fileSize(char* filename)
{
currentPos = lseek(filename, (size_t)0, SEEK_CUR);
size = lseek(filename, (size_t)0, SEEK_END);
lseek(filename, currentPos, SEEK_SET); // seek back to the beginning of file
return size;
}

最佳答案

从观察到的情况来看,也许您想知道如何以“mem”结构(您自己设计的)将文件大小传递回调用者。这当然是可能的;然而,“fileSize()”函数必须提供内存来返回这个“mem”结构。也许是这样的:

struct mem* fileSize(char* filename)
{
struct mem *m = malloc(sizeof(*m));

添加上面的行以分配合适大小的内存。

...也许还有一点点...lseek() 不将文件名作为第一个参数。相反,它需要一个“文件描述符”,可以通过实现“open()”获取(从文件名):

   int fd = open(filename, O_RDONLY);

现在,fd 可以传递给“lseek()”,而不是文件名。

   off_t currentPos = lseek(fd, (size_t)0, SEEK_CUR);
m->size = lseek(fd, (size_t)0, SEEK_END);

“m”是一个“struct mem *”,您现在可以在其中存储大小。

   lseek(fd, currentPos, SEEK_SET);   // seek back to the beginning of file

完成后不要忘记关闭文件:

   close(fd);

return(m);

分配并初始化的“m”返回给调用者(m->size)。

}

调用者(fileSize)应该在使用完(struct mem)内存后“free()”它以防止内存泄漏。

关于c - 使用 lseek 在 C 中获取文件的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23306552/

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