在文件流中向后退一个

时间:2012-03-03 20:36:22

标签: c pointers filestream encryption

假设我有一个像这样的文件指针:

file_ptr = fopen(“test.txt”, “r+”);

我希望在流过流时更改每个char的ASCII值(我这样做是为了一个密码,所以如果有更好或更有效的方法来做到这一点,请让我知道)。

我正在尝试使用while(!feof(file_ptr)) {}循环fgetc()fputc,但file_ptr将指向下一个字符,所以我想知道是否存在我能做的就是把它指向一个位置。

基本上,我想知道相当于的文件流:

char* blah="blah blah";
char* index=blah;
index++;/*how to navigate a file stream in this way*/

1 个答案:

答案 0 :(得分:6)

是:您可以使用the fseek function

fseek(file_ptr, -1L, SEEK_CUR); // move backwards one character

此外,在fputc之前和fgetc之前,您需要再次致电fseek

fseek(file_ptr, 0L, SEEK_CUR); // don't move

只是通知系统您正在读取和写入之间切换,以便它知道正确刷新所有缓冲区等等。 (否则你可能实际上并不在你想的地方。)

顺便说一句,要使其正常工作,您需要以二进制模式而不是文本模式打开文件:

file_ptr = fopen("test.txt", "rb+");

因为否则“字符”的内部C定义可能与“字符”的内部文件定义不完全匹配(特别是当涉及行结尾时),并且fseek可能会使您进入其中一个中间。