CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

C++ I/O 问题

楼主humanzhang()2006-03-25 15:03:43 在 C/C++ / C++ 语言 提问

#include   <iostream.h>  
  #include   <fstream.h>  
  #include   <stdio.h>  
  #include   <windows.h>  
   
  int   main()    
  {        
          ofstream   creat("test.txt");     //   创建一个test.tst文件供测试    
           
          if(   !creat   )  
          {  
                  cout<<"HDD   not   ready   to   test!";  
                  return   0;  
          }  
           
          cout   <<   "successful"   <<endl;  
           
          char   *str   =   new   char[1024];  
          memset(str,49,1024);//内容全为字符   '1'    
           
          creat.write(str,   1024);//   生成一个1kB的test.tst文件内容全部为字符   '1'  
          creat.close();  
           
          ifstream   in("test.txt");      
           
          DWORD   dwTest;    
          DWORD   dwCountEnd;  
          in.seekg(0,ios::beg);  
          int   count   =   0   ;  
          int   count2   =   0   ;  
          char   content;  
          DWORD   dwStart   =   GetTickCount();  
          DWORD   dwEnd   =   (   dwStart   +   500);  
           
           
          while   (   (   dwTest   =   GetTickCount()   )   <=   dwEnd   )   //使程序运行时间控制在0。5秒以内    
          {  
                      //in.read(   str,   1   );  
                      content   =   in.get();   //想显示读的字符‘1’,可惜不成功!--问题1  
                      cout   <<   content   <<endl;  
                      count2   ++;  
                      cout   <<   count2<<endl;  
                       
                      if   (   in.eof()   )  
                      {  
                                count++;            
                                in.seekg(0,ios::beg);   //想使读指针回到文件头,再从头读起,但是不成功好像只  
                                                                            //有第一次是从头读起,以后就是一直在eof那里  
                                                                            //   问题2  
                                dwCountEnd   =   GetTickCount();  
                      }            
          }  
           
          in.close();  
                                             
          cout   <<   "   dwStart:   "   <<   dwStart   <<   endl;  
          cout   <<   "   dwTest:   "   <<   dwTest   <<   endl;  
          cout   <<   "   dwEnd:   "   <<   dwEnd   <<   endl;  
          cout   <<   "   dwCountEnd:   "   <<   dwCountEnd   <<endl;  
          cout   <<   "   count:   "   <<   count   <<   endl;     //显示程序多少次读到文件尾,结果从第一次读到  
                                                                                      //文件尾后就赖在文件尾那里不走了。  
          system   ("Pause");  
          return   1;          
  }  
   
  想法是先创建一个写满1的大小为1kB文件,再一个字符一个字符的读,读的时间控制在大约0.5秒以内。在0.5秒以内的时候如果读到文件尾就再从头读起。  
  问题1:我如何显示读的内容,就是字符'1',老是显示不成功。  
  问题2:我如何在第一次读到文件尾的时候,让程序乖乖的再从头读起呢? 问题点数:100、回复次数:9Top

1 楼shenmea00000(学习中~~~)回复于 2006-03-25 15:39:43 得分 0

不明白~~~~~Top

2 楼fangrk(加把油,伙计!)回复于 2006-03-25 16:00:23 得分 30

试试看这样行不行:  
   
   
  #include   <iostream>  
  #include   <fstream>  
  #include   <windows.h>  
  using   namespace   std;  
  int   main()    
  {        
          ofstream   creat("test.txt");     //   创建一个test.tst文件供测试    
           
          if(   !creat   )  
          {  
                  cout<<"HDD   not   ready   to   test!";  
                  return   0;  
          }  
           
          cout   <<   "successful"   <<endl;  
          for(int   i=0;i<1024;++i)   create<<'1';  
          creat.close();  
           
          ifstream   in("test.txt");      
           
          DWORD   dwTest;    
          DWORD   dwCountEnd;  
          in.seekg(0,ios::beg);  
          int   count   =   0   ;  
          int   count2   =   0   ;  
          char   content;  
          DWORD   dwStart   =   GetTickCount();  
          DWORD   dwEnd   =   (   dwStart   +   500);  
           
           
          while   (   (   dwTest   =   GetTickCount()   )   <=   dwEnd   )   //使程序运行时间控制在0。5秒以内    
          {  
                      //in.read(   str,   1   );  
                      content   =   in.get();   //想显示读的字符‘1’,可惜不成功!--问题1  
                      cout   <<   content   <<endl;  
                      count2   ++;  
                      cout   <<   count2<<endl;  
                       
                      if   (   in.eof()   )  
                      {  
                                count++;            
                                in.clear();  
                                in.seekg(0,ios::beg);   //想使读指针回到文件头,再从头读起,但是不成功好像只  
                                                                            //有第一次是从头读起,以后就是一直在eof那里  
                                                                            //   问题2  
                                dwCountEnd   =   GetTickCount();  
                      }            
          }  
           
          in.close();  
                                             
          cout   <<   "   dwStart:   "   <<   dwStart   <<   endl;  
          cout   <<   "   dwTest:   "   <<   dwTest   <<   endl;  
          cout   <<   "   dwEnd:   "   <<   dwEnd   <<   endl;  
          cout   <<   "   dwCountEnd:   "   <<   dwCountEnd   <<endl;  
          cout   <<   "   count:   "   <<   count   <<   endl;     //显示程序多少次读到文件尾,结果从第一次读到  
                                                                                      //文件尾后就赖在文件尾那里不走了。  
          system   ("Pause");  
          return   1;          
  }Top

3 楼corrupt(喜欢 睡在床板下 的思考)回复于 2006-03-25 16:09:40 得分 10

1:       creat.close();  
            creat.clear();Top

4 楼gold123d(Love linux Love shell)回复于 2006-03-25 17:54:16 得分 0

"         for(int   i=0;i<1024;++i)   create<<'1'"  
  这一行中的"create"应该是"creat".Top

5 楼ricky460(阿酷)回复于 2006-03-25 19:30:57 得分 30

问题一:    
       
        content   =   in.get();   //想显示读的字符‘1’,可惜不成功!--问题1  
       
        改成  
       
        in   >>   content   ;  
   
  问题二:    
          在  
          in.seekg(0,ios::beg);   //想使读指针回到文件头,再从头读起,但是不成功好像只  
                                                                            //有第一次是从头读起,以后就是一直在eof那里  
                                                                            //   问题2  
   
          前面加上:  
          in.clear();Top

6 楼ugg(逸学堂(exuetang.net))回复于 2006-03-25 20:51:17 得分 20

问题1:我如何显示读的内容,就是字符'1',老是显示不成功。  
   
  考虑用sstingstream读取内容。  
   
  问题2:我如何在第一次读到文件尾的时候,让程序乖乖的再从头读起呢?  
   
  文件指针的移位,主要用于二进制操作。楼主用在字符操作中,结果不可预料。Top

7 楼humanzhang()回复于 2006-03-25 22:55:43 得分 0

ugg  
        你说的太对了   我改成了生成2进制的了   多谢大家指教!!!Top

8 楼humanzhang()回复于 2006-03-25 23:33:43 得分 0

#include   <iostream.h>  
  #include   <fstream.h>  
  #include   <stdio.h>  
  #include   <windows.h>  
   
  int   main()    
  {        
          ofstream   creat("test.bin",ios::out|ios::binary);     //   创建一个test.tst文件供测试    
           
          if(   !creat   )  
          {  
                  cout<<"HDD   not   ready   to   test!";  
                  return   0;  
          }  
           
          cout   <<   "successful"   <<endl;  
           
          char   *str   =   new   char[1024];//1048576  
          memset(str,49,1024);//内容全为字符   '1'    
           
          creat.write(str,1024);//   生成一个1kB的test.tst文件内容全部为字符   '1'  
          creat.close();  
          creat.clear();  
           
          ifstream   in("test.bin",ios::in|ios::binary);      
           
          DWORD   dwTest;    
          DWORD   dwCountEnd;  
          in.clear();  
          in.seekg(0,ios::beg);  
          DWORD   dwStart   =   GetTickCount();  
          DWORD   dwEnd   =   (   dwStart   +   1000);  
           
           
          while   (   (   GetTickCount()   )   <=   dwEnd   )   //使程序运行时间控制在0。5秒以内    
          {  
                      in.get();    
                       
                      if   (   in.eof()   )  
                      {  
                                count++;  
                                in.clear();  
                                in.seekg(0,ios::beg);   //想使读指针回到文件头    
                      }            
          }  
           
          in.close();  
                                             
          cout   <<   "   dwStart:   "   <<   dwStart   <<   endl;  
          cout   <<   "   dwEnd:   "   <<   dwEnd   <<   endl;  
          cout   <<   "   count:   "   <<   count   <<   endl;  
          system   ("Pause");  
          return   1;          
  }  
   
  程序运行的结果是   count   的值是   13115   左右;   也就是说在大约1000毫秒的时间里面,我一个字符一个字符读一个1kb的文件读了13115次,   也就是差不多12.8M/s,   大家说这样的速度时不是有点慢得不正常,我主要目的是测试读硬盘的速度,应该在那里改进为好呢!Top

9 楼strangerryf(白痴与白痴讨论的结果一定是比白痴更为白痴的结论)回复于 2006-03-26 09:11:26 得分 10

正常,好像用C的fwrite,fprintf等函数效率会高一点,前几天刚做过实验。12.8*8=102.4,磁盘速度差不多是100Mbps了。Top

相关问题

  • 请教c++的I\O输入问题
  • vb.net中c#中的 o Is LinkButton 怎么写
  • 关于C中的I/O的问题
  • c#?!?!?!
  • :)C#
  • C#!!!!!
  • C
  • c++
  • C#?
  • C#

关键词

  • 文件
  • 测试
  • ofstream
  • 问题
  • tst文件供测试
  • cout
  • ios
  • include
  • creat
  • 创建一个

得分解答快速导航

  • 帖主:humanzhang
  • fangrk
  • corrupt
  • ricky460
  • ugg
  • strangerryf

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo