用CFile Read()读取.rmvb 等较大文件时候,总是读不到想要的长度char buff[1024] = {0};
int  length = 0;
int  readsize = 0CFile file("c:\\test.rmv", CFile::modeRead);
length = file.GetLength();while (readsize<length)
{
   int rtszie = file.Read(buff, 1000);
   readsize++rtsize;
}rtsize 的返回值总不是1000,循环几次后,rtsize 总是5,反正是个很小的值?到底什么原因?

解决方案 »

  1.   

    CFile::Read 
    virtual UINT Read( void* lpBuf, UINT nCount );
    throw( CFileException );Return ValueThe number of bytes transferred to the buffer. Note that for all CFile classes, the return value may be less than nCount if the end of file was reached. 当读到文件的结尾时,rtsize的值会小于1000
      

  2.   

    最好是贴真正测试出问题的代码,这样随便写的代码有很多错误,干扰判断问题。第1次Read返回值就小于1000是吗?文件是多大?如果文件大于4GB,int变量是无法表示的。另外你用的是哪个版本的VC?VC6的CFile好象是不支持超过4GB文件的。
      

  3.   

    rmv文件要用二进制打开的,试试:
    CFile file("c:\\test.rmv", CFile::modeRead|CFile::typeBinary ); 
      

  4.   

    修正代码中的错误后,无任何问题
    char buff[1024] = {0};
    int  length = 0;
    int  readsize = 0;CFile file("c:\\test.rmv", CFile::modeRead);
    length = file.GetLength();while (readsize <length)
    {
      int rtszie = file.Read(buff, 1000);
      readsize+=rtszie;
      

  5.   

    readsize++rtsize; 
    这个有错,你的结果表明你读了5次,并非文件长度是5字节。
    该城楼上代码试试。
      

  6.   


    char buff[1024] = {0}; 
    int  length = 0; 
    int  readsize = 0 CFile file("c:\\test.rmv", CFile::modeRead); 
    length = file.GetLength(); while (readsize <length) 

      int rtszie = file.Read(buff, 1000); 
      readsize++=rtsize; //少了=号,readzise不能正确赋值
      

  7.   

    哈哈!CSDN增加显示专家分可用分倒有点意思。
    我发现:
    Mackz 好像比较闲,每个月都有大量时间回帖,是不是学生呀?或是boss级人物?哈哈;
    keiy 好像是全才啊,delphi。c++ builder,java,vc 大哥,还有您不会的么?呵呵!
      

  8.   

    rmv文件要用二进制打开的,不应该用文本类型