我正在寻找如何使用C编写和读取文件。在发现使用fopen(“foo”,“r +”)或fopen(“foo”,“w +”)之后它应该是可能的,我决定创建一个虚拟程序只是为了尝试它。 这是该计划:
#include <stdio.h>
int main(){
char reader[81];
FILE *USE = fopen("dummy.txt", "w+");
fprintf(USE,"whatever \r\nhello");
while(fgets(reader, 80, USE)) {
printf("%s", reader);
}
fclose(USE);
return 0;
}
想法是创建一个名为dummy.txt的新文件。每次执行该程序时,在dummy.txt中写入2行,然后在命令行或终端中显示这些行。你可以看到它不是最有用的程序,但知道如何做到这一点在将来会非常有用。
任何帮助都是好的
答案 0 :(得分:3)
要再次阅读该文件,您应使用rewind
功能:
fprintf(USE,"whatever \r\nhello");
rewind(USE); // put the file pointer to the begin of file;
while(fgets(reader, 80, USE));
另一种方法是使用fseek
:
int fseek(FILE *stream, long int offset, int whence)
其中:
stream - 这是指向标识的FILE对象的指针 流。
offset - 这是从哪里偏移的字节数。
whence - 这是添加偏移量的位置。是 由以下常量之一指定:
1 - SEEK_SET Beginning of file
2 - SEEK_CUR Current position of the file pointer
3 - SEEK_END End of file
您也可以使用:
long int ftell ( FILE * stream );
表示流中的当前位置。
Here,更多关于fseek vs rewind的信息
答案 1 :(得分:0)
您忘记了回放文件:
fprintf(USE,"whatever \r\nhello");
rewind(USE); //<<< add this
while(fgets(reader, 80, USE)) {
写入文件后,文件指针位于文件末尾。因此,为了阅读您所编写的内容,必须使用rewind
将文件指针设置为文件的开头。
如果要将文件指针放在开头的其他位置,请使用fseek。 ftell
将告诉您当前文件指针的位置。
与您的问题无关的旁注
不要使用所有大写变量名称,例如USE
,所有大写名称通常仅用于宏。
答案 2 :(得分:-1)
我的解决方案,不要使用w +而是r +。
文件顶部
#include <stdio.h>
#include <stdlib.h>
全局
FILE * g_file;
打开文件
int openFile() {
g_file = fopen("my_file.txt", "r+");
if( g_file == NULL )
{
// No file ?
g_file = fopen("my_file.txt", "w+");
}
return 0;
}
读写
#define MAX 64
#define true 1
#define false 0
int writeReadFile() {
char line[MAX] = "";
int size = 0;
while( fgets(line, MAX, g_file) )
{
// Check something
// result = sscanf(line, etc...)
// if ( result == argument number ok) ...
// strcmp( ? , ? ) == 0
// strlen compare size of the previous line and new line
if ( true ) {
size = ftell(g_file);
}
// Replace something
if( true ) {
fseek(g_file, size, SEEK_SET);
// fputc if size differ
// fprintf if size ok
}
size = ftell(g_file);
}
fprintf(g_file, "%s\n", "info");
}
主要
int main(void)
{
printf("Hello World !\n");
openFile();
writeReadFile();
return 0;
}
请请不要删除我的信息。 一旦我写了这个。我从页面收到链接,将其保存,然后可以将其重新用于其他代码。因此,请勿删除。谢谢。
他在我这边编译,也希望你。 请,请删除并且不要留下不好的音符。