C语言 如何在特定位置之间读取文件?

x7rlezfr  于 2022-12-03  发布在  其他
关注(0)|答案(3)|浏览(317)

假设我有这样一个文件:

card the red 
parrots massive
belt earth

如果我想从第2个位置读取到第10个位置并打印:

ard the r

我该如何做到这一点?

6tdlim6h

6tdlim6h1#

最直接的方法是使用fseek,然后使用fread。为了简单起见,此代码省略了错误检查。

#include <stdio.h>
#include <string.h>

int main(){
    FILE* f = fopen("File.txt", "r");
    fseek(f, 1, SEEK_SET);
    char buf[10];
    memset(buf, 0, 10);
    fread(buf, 1, 9, f);
    printf("%s\n", buf);
}
fdx2calv

fdx2calv2#

这很简单,只需给予一些示例代码:

FILE *f = fopen("path/to/file", "r");
fseek(f, 1, SEEK_SET);  // set file pointer to 2nd position (0-indexed)
char part[10] = {0};    // array for 9 characters plus terminating 0
fread(part, 1, 9, f);   // read 9 members of size 1 (characters) from f into part
puts(part);             // or any other way to output part, like using in printf()

为此,您需要#include <stdio.h>,而在真实的代码中,您必须检查所有返回值中可能发生的错误
如需更多信息,请参阅fseek()fread()的缐上手册。
注意还有很多其他可能的方法,例如,你可以直接 * 读取并忘记 * 第一个字符,而不是 * seek *,例如,使用fgetc().另请参阅Some programmer dude 's comment --对于一个文本文件,从它阅读总是会为每一行结尾给予一个\n,无论你的操作系统使用什么,而fseek()操作的是磁盘上的真实的字节,行尾可能被编码为\r\n(两个字节)。

d8tt03nd

d8tt03nd3#

如果是MFC应用程序,则可以使用CFile:

char WBuf[]= "card the red parrots massive belt earth";
printf("WBuf = %s\n",WBuf); // WBuf = card the red parrots massive belt earth

CFile file;
file.Open("test.txt", CFile::modeCreate|CFile::modeNoTruncate|CFile::modeReadWrite);
file.Write(WBuf, sizeof(WBuf));             
file.Close();

// read   

char RBuf[30] = {0,};
file.Open("test.txt", CFile::modeRead);
file.Seek(1, CFile::begin);      // move file pointer 1time from the beginning of the file
file.Read(RBuf, 9);              // and then read 9bytes
file.Close();

printf("RBuf = %s\n", RBuf);     // RBuf = ard the r

相关问题