学了几年的C#,最近刚刚接触MFC,真心觉得MFC很难,在C#一个很简单的获取文件大小,到MFC问题就很多.几百M的文件没有问题.如果是大文件,比如4G的MPG文件,,,获取的大小明显小于实际大小,,拷贝的时候也会报错..
CFileFind cff;
CString str;
     if(cff.FindFile("e:\\李克勤.-.[2011年香港小交响乐团演奏厅演唱会].演唱会.(720P).mkv"))
{
 cff.FindNextFile();  
long len = cff.GetLength();
str.Format("%0.2lf",cff.GetLength64()/1024.0/1024.0/1024.0);
cff.Close();
MessageBox(str);
}
实际问题有9.4G,但是获取只有1.5G
使用GetLength() 和 GetLength64() 获取的值是一样的
用了FindFirstFile WIN32_FIND_DATA结构体,,获取 还是不对...
还有个问题,,比如有个字符串qw|er,我想吧这个字符串 已 "|" 分割为两个字符的数组,,C#里真是很简单,但是MFC查了很久的资料 都没有这样的函数,,不会 自己 写个循环吧?? 

解决方案 »

  1.   

    在VC中long是32位整数
    你要大数需要用longlong
      

  2.   

    //获取文件大小
    _wfopen_s(&this->m_fileSend,this->m_strFileName,_T("rb"));//m_strFileName是文件全路径名
    if(this->m_fileSend) {//FILE *m_fileSend;int nFileSize_s;
    nFileSize_s = _filelength(fileno(this->m_fileSend));
    _itoa(nFileSize_s,&sendBuf[0x101],10);
    }
      

  3.   

    typedef struct _WIN32_FIND_DATA { 
     DWORD dwFileAttributes;  
    FILETIME ftCreationTime; 
     FILETIME ftLastAccessTime;
      FILETIME ftLastWriteTime;
      DWORD nFileSizeHigh;
      DWORD nFileSizeLow; 
     DWORD dwReserved0; 
     DWORD dwReserved1;
      TCHAR cFileName[MAX_PATH];
      TCHAR cAlternateFileName[14];
    } WIN32_FIND_DATA,  *PWIN32_FIND_DATA,  *LPWIN32_FIND_DATA;nFileSizeHigh 
    The high-order DWORD value of the file size, in bytes.This value is zero (0) unless the file size is greater than MAXDWORD.The size of the file is equal to (nFileSizeHigh * (MAXDWORD+1)) + nFileSizeLow.