c言语读取文件慢问题

jay_hbb 2013-06-12 02:43:46
本人是菜鸟,问题是这样的,从文件头开始读到文件尾速度非常快,但是从文件尾读到文件头却非常慢,不知道为什么,希望解决如何加快从文件尾读到文件头的读取速度?
我写的代码如下,请牛人指点:

FILE *infile;
int filesize;
if( ( infile = fopen( "test.txt", "rb" ) ) == NULL )
{
printf( "\n\t文件打开失败,按任意键退出\n" );
getch( );
exit( 0 );
}
fseek( infile, 0L, SEEK_END );
filesize = ftell( infile );
for( int i = 0; i < filesize; i++ )
{
if( i == 0 ){
fseek( infile, -1L, SEEK_CUR );
printChar( getc( infile ) );
}
fseek( infile, -2L, SEEK_CUR );
printChar( getc( infile ) );
}
...全文
190 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jay_hbb 2013-06-12
  • 打赏
  • 举报
回复
现在就是从硬盘读到内存慢
jay_hbb 2013-06-12
  • 打赏
  • 举报
回复
引用 4 楼 baichi4141 的回复:
把整个文件读取到内存里,然后想访问什么位置就访问什么位置 如果楼主知道“硬盘是顺序存储,内存是随机存储”这句话的意思,就不会问出这种问题了
文件有1G以上的也全读到内存吗?
baichi4141 2013-06-12
  • 打赏
  • 举报
回复
把整个文件读取到内存里,然后想访问什么位置就访问什么位置 如果楼主知道“硬盘是顺序存储,内存是随机存储”这句话的意思,就不会问出这种问题了
jay_hbb 2013-06-12
  • 打赏
  • 举报
回复
找个10M左右的文件读取一下就可以区分快慢了,从文件头开始读到文件尾速度非常快,但是从文件尾读到文件头却非常慢,顺序读和逆序读差别时间很大。
baichi4141 2013-06-12
  • 打赏
  • 举报
回复
大文件可以将文件映射到内存 我说先把文件读入内存指的是先顺序读入,再在内存里逆序访问
C_linux记事 2013-06-12
  • 打赏
  • 举报
回复
引用 1 楼 my_c_linux 的回复:
#include <stdio.h>
#include <conio.h>
int main(void)
{
	FILE  *infile;
	int filesize;
	int ch;
	if( ( infile = fopen( "test.txt", "rb" ) ) == NULL )
	{
	    printf( "\n\t文件打开失败,按任意键退出\n" );
	    getch( );
	    exit( 0 );
	}
	//printf("%d\n", *infile);
	fseek( infile, 0L, SEEK_END );
	filesize = ftell( infile );//文件大小 
//	printf("%d\n", filesize);
	for( long i = 1; i <= filesize; i++ )
	{    
	    //if( i == 0 ){
   		fseek( infile, 0L, SEEK_END );
     	fseek( infile, -i, SEEK_CUR );
	        //printChar( getc( infile ) );
	    ch = getc(infile);
	    printf("%c\n", ch);
	    //}
	    //fseek( infile, -2L, SEEK_CUR );
	    //printChar( getc( infile ) );
	    //getc(infile);
	}
}
怎么测试快慢, 请问一下。
C_linux记事 2013-06-12
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <conio.h>
int main(void)
{
	FILE  *infile;
	int filesize;
	int ch;
	if( ( infile = fopen( "test.txt", "rb" ) ) == NULL )
	{
	    printf( "\n\t文件打开失败,按任意键退出\n" );
	    getch( );
	    exit( 0 );
	}
	//printf("%d\n", *infile);
	fseek( infile, 0L, SEEK_END );
	filesize = ftell( infile );//文件大小 
//	printf("%d\n", filesize);
	for( long i = 1; i <= filesize; i++ )
	{    
	    //if( i == 0 ){
   		fseek( infile, 0L, SEEK_END );
     	fseek( infile, -i, SEEK_CUR );
	        //printChar( getc( infile ) );
	    ch = getc(infile);
	    printf("%c\n", ch);
	    //}
	    //fseek( infile, -2L, SEEK_CUR );
	    //printChar( getc( infile ) );
	    //getc(infile);
	}
}

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧