我有两个.txt文件;第一个有一些包含数字和单词的行,另一个有一些文本。我必须读取数字n
和一个单词,并在另一个文件中从位置n
开始写入单词。我写的代码只是把所有的单词都写到最后,我不知道如何修复它。
osAssert(3 == argc, "argc");
struct stat fInfo;
osAssert(-1 != stat(argv[1], &fInfo), "stat");
osAssert(S_ISREG(fInfo.st_mode), "prvi fajl nije reg");
osAssert(-1 != stat(argv[2], &fInfo), "stat");
osAssert(S_ISREG(fInfo.st_mode), "drugi fajl nije reg");
FILE *f1 = fopen(argv[1], "r");
osAssert(NULL != f1, "open");
FILE *f2 = fopen(argv[2], "a");
osAssert(NULL != f2, "open2");
rewind(f2);
int fd = fileno(f2);
int n;
char rec[MAX];
while(EOF != fscanf(f1, "%d %s", &n, rec)){
printf("%d %s ", n, rec);
osAssert(-1 != fseek(f2, n, SEEK_SET), "fseek");
osAssert(-1 != write(fd, rec, strlen(rec)), "write");
}
fclose(f1);
fclose(f2);
osAssert函数只是检查条件是真还是假,如果不是,就停止程序。
1条答案
按热度按时间xuo3flqw1#
如果你想覆盖文件的一部分,而其他的一切都保持原样,你可以以“r+"打开目标文件。这将打开文件,而不截断它,并将“光标”放置在偏移量0处,具有读写能力。
然后,在
fopen
-ing文件后,fseek
到你想写的位置,fwrite
你的数据在那里。请看下图,了解所有可能的打开模式(从this SO post开始):