gpt4 book ai didi

c - 查找由 fmemopen 创建的文件的大小

转载 作者:太空狗 更新时间:2023-10-29 11:09:56 25 4
gpt4 key购买 nike

我正在使用 fmemopen 创建一个变量 FILE* fid 以将其传递给一个从打开的文件中读取数据的函数。

在该函数的某处,它使用以下代码找出文件的大小:

fseek(fid, 0, SEEK_END);
file_size = ftell(fid);

这在常规文件的情况下效果很好,但在由 fmemopen 创建的文件 ID 的情况下,我总是得到 file_size = 8192

知道为什么会这样吗?是否有一种方法可以获取适用于常规文件和使用 fmemopen 创建的文件的正确文件大小?

编辑:我对 fmemopen 的调用:

fid = fmemopen(ptr, memSize, "r");

其中 memSize != 8192

编辑 2:

我创建了一个最小示例:

#include <cstdlib>
#include <stdio.h>
#include <string.h>
using namespace std;

int main(int argc, char** argv)
{
const long unsigned int memsize = 1000000;
void * ptr = malloc(memsize);
FILE *fid = fmemopen(ptr, memsize, "r");
fseek(fid, 0, SEEK_END);
long int file_size = ftell(fid);
printf("file_size = %ld\n", file_size);
free(ptr);
return 0;
}

顺便说一句,我目前正在另一台计算机上工作,这里我得到 file_size=0

最佳答案

fmemopen 的情况下,如果您使用选项 b 打开,则 SEEK_END measures the size of the memory buffer .您看到的值必须是默认缓冲区大小。

关于c - 查找由 fmemopen 创建的文件的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13472210/

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