gpt4 book ai didi

c++ - 在 C++ 中取消读取文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:40:17 25 4
gpt4 key购买 nike

我正在尝试读取同时写入磁盘的文件。我需要阅读特定大小的 block 。如果读取的大小小于特定大小,我想取消读取文件(类似于 ungetc 所做的,而不是 char[])并重试。附加到已读取的字节对我来说不是一个选项。

这怎么可能?

我尝试通过以下方式保存当前位置:

FILE *fd = fopen("test.txt","r+");
fpos_t position;
fgetpos (fd, &position);

然后读取文件并将指针放回其之前的读取位置。

numberOfBytes = fread(buff, sizeof(unsigned char), desiredSize, fd) 
if (numberByBytes < desiredSize) {
fsetpos (fd, &position);
}

但是好像不行。

最佳答案

用我刚刚检查过的代码替换我之前的建议(Ubuntu 12.04 LTS,32 位)。 GCC 是 4.7,但我很确定这是 100% 的标准解决方案。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#define desiredSize 10
#define desiredLimit 100

int main()
{
FILE *fd = fopen("test.txt","r+");
if (fd == NULL)
{
perror("open");
exit(1);
}

int total = 0;
unsigned char buff[desiredSize];

while (total < desiredLimit)
{
fpos_t position;
fgetpos (fd, &position);

int numberOfBytes = fread(buff, sizeof(unsigned char), desiredSize, fd);
printf("Read try: %d\n", numberOfBytes);
if (numberOfBytes < desiredSize)
{
fsetpos(fd, &position);
printf("Return\n");
sleep(10);
continue;
}
total += numberOfBytes;
printf("Total: %d\n", total);
}
return 0;
}

我正在从另一个控制台向文件添加文本,是的,根据我添加的内容,读取进度为 5 个字符 block 。

关于c++ - 在 C++ 中取消读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16047777/

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