我正在读取预读取文件中的数据,并将其存储在缓冲区中,我在缓冲区中运行了一个结构体来组织数据,然后将其重新保存在另一个文件中。
但是我只读了一行代码。
我的代码 - 打开文件:
File *p_file
char fileLocation[40];
char buff[1000];
printf("\nEnter file name: \n");
scanf("%s, fileLocation);
p_file = fopen(fileLocation, "r");
if(!p_file)
{
printf("\nError!\n");
}
循环读取数据并保存文件
while(fgets(buff, 1000, p_file)!=NULL
{
printf("%s", buff);
storedData.source = atoi(strtok(buff, ":");
storedData.destination = atoi(strtok(0, ":");
storedData.type = atoi(strtok(0, ":");
storedData.port = atoi(strtok(0, ":");
storedData.data = strtok(0, ":\n");
printf("\nEnter a File Name to save:");
scanf("%s", fileLocation);
if ((p_file = fopen(fileLocation, "w")) == NULL
{
puts("\n Could not point to the file.");
}else{
printf("\nSaving");
fprintf(p_file, "%04d:%04d:%04d:%04:%s \n",
storedData.source,
storedData.destination,
storedData.type,
storedData.port,
storedData.data );
fclose(p_file);
}
fclose(p_file);
当前的数据输出:
0001:0002:0003:0021:CLS
想要输出数据:
0001:0002:0003:0021:CLS
0001:0010:0003:0021:CLS
0001:0002:0002:0080:<HTML>
我相信我必须声明一个整数值来用于循环文件内容以及使用malloc来获取结构的大小但是我不知道如何去做这个。任何帮助都感激不尽。
答案 0 :(得分:1)
您过度使用p_file
来读取文件以及要写入的文件。
if ((p_file = fopen(fileLocation, "w")) == NULL)
这样你就会丢失你打开阅读文件的指针。
当您在else
部分fgets()
中关闭它时,认为没有更多行。
使用其他一些变量来编写文件。
如果您想处理缓冲数据,请更改while(fgets()...
以读取所有行,然后处理每一行。 fgets()
不会读取多行。
答案 1 :(得分:1)
你的循环实际上只做了一次
storedData.data = strtok(0, ":\n");
所以你只需要第一行。
答案 2 :(得分:0)
FILE *in_file;
FILE *out_file;
char fileLocation[40];
char buff[1000];
printf("\nEnter file name: \n");
if( 1 != scanf(" %s, fileLocation) )
{
perror( " scanf failed for input file: );
exit( EXIT_FAILURE );
}
if( NULL == (in_file = fopen(fileLocation, "r") )
{
perror( "fopen failed for input file" );
exit( EXIT_FAILURE );
}
printf("\nEnter a File Name to save:");
if( 1 != scanf(" %s", fileLocation) )
{
perror( "scanf failed for outut file name" );
fclose( in_file ); // cleanup
exit( EXIT_FAILURE );
}
if ( NULL == (out_file = fopen(fileLocation, "w")) )
{
perror( " fopen failed for output file" );
fclose( in_file ); // cleanup
exit( EXIT_FAILURE )l
}
while(fgets(buff, 1000, p_file)!=NULL) )
{
printf("%s", buff);
storedData.source = atoi(strtok(buff, ":");
storedData.destination = atoi(strtok(0, ":");
storedData.type = atoi(strtok(0, ":");
storedData.port = atoi(strtok(0, ":");
storedData.data = strtok(0, ":\n");
printf("\nSaving");
fprintf(p_file, "%04d:%04d:%04d:%04:%s \n",
storedData.source,
storedData.destination,
storedData.type,
storedData.port,
storedData.data );
} // end while
fclose( in_file ); // cleanup
fclose( out_file ); // cleanup