怎样获得CFile.Read读到的字符数?

Liulingbing 2003-10-17 08:23:27
RT
...全文
156 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zoohoo 2003-10-17
  • 打赏
  • 举报
回复
就是read函数的返回值嘛,如下:
CFile::Read

virtual UINT Read( void* lpBuf, UINT nCount );
throw( CFileException );

Return Value

The 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.

njuhuangmy 2003-10-17
  • 打赏
  • 举报
回复
如标题 所说, Read 函数必须指定读入的长度的阿

当然,这个 cfile.Read(buf, size); 读入的长度应该 是 小于 等于 size 的!!

返回值 就是 读入的长度
njuhuangmy 2003-10-17
  • 打赏
  • 举报
回复
文件的打开 之类 就不说它了

cfile.GetLength() 取得 文件的大小
cfile.SeekToBegin() 确保返回 文件头
cfile.Read() 读入
Liulingbing 2003-10-17
  • 打赏
  • 举报
回复
或者这样问,怎么样把一个CFile关联的字符文件所有字符读到一个CString对象里。
Liulingbing 2003-10-17
  • 打赏
  • 举报
回复
The number of bytes is not equal to the chacater readed.
CFile //创建/打开文件 CFile file; file.Open(_T("test.txt"),CFile::modeCreate|CFile::modeNoTruncate|CFile::modeReadWrite); 文件打开模式可组合使用,用“|”隔开,常用的有以下几种: CFile::modeCreate:以新建方式打开,如果文件不存在,新建;如果文件已存在,把该文件长度置零,即清除文件原有内容。 CFile::modeNoTruncate:以追加方式打开,如果文件存在,打开并且不将文件长度置零,如果文件不存在,会抛出异常。一般与CFile::modeCreate一起使用,则文件不存在时,新建一个文件;存在就进行追加操作。 CFile::modeReadWrite:以读写方式打开文件。 CFile::modeRead:只读。 CFile::modeWrite:只写。 //写入据 CString strValue = "Hello World!"; file.Write(strValue,strValue.GetLength()); //追加file.SeekToEnd(); //将指针移至文件末尾进行追加 file.Write(strValue,strValue.GetLength()); //关闭文件 file.Close(); CStdioFile CStdioFile是CFile的派生类,对文件进行流式操作,对于文本文件的读写很有用处,可按行读取写入。 //写入据 CString strValue = "Hello World!"; file.WriteString(strValue); //读取据 CString strRead; file.ReadString(strRead); 当文件存在多行据需要逐行读取时,可用函BOOL CStdioFile::ReadString(CString& rString),当遇到"\n "时读取截断,如果文件未读完,返回true,否则返回false。 //逐行读取文件内容,存入strRead while(file.ReadString(strRead)) { ...; } 各种关于文件的操作在程序设计中是十分常见,如果能对其各种操作都了如指掌,就可以根据实际情况找到最佳的解决方案,从而在较短的时间内编写出高效的代码,因而熟练的掌握文件操作是十分重要的。本文将对Visual C++中有关文件操作进行全面的介绍,并对在文件操作中经常遇到的一些疑难问题进行详细的分析。   1.文件的查找   当对一个文件操作时,如果不知道该文件是否存在,就要首先进行查找。MFC中有一个专门用来进行文件查找的类CFileFind,使用它可以方便快捷地进行文件的查找。下面这段代码演示了这个类的最基本使用方法。   CString strFileTitle;   CFileFind finder;   BOOL bWorking = finder.FindFile("C:\\windows\\sysbkup\\*.cab");   while(bWorking)   {   bWorking=finder.FindNextFile();   strFileTitle=finder.GetFileTitle();   }   2.文件的打开/保存对话框   让用户选择文件进行打开和存储操作时,就要用到文件打开/保存对话框。MFC的类CFileDialog用于实现这种功能。使用CFileDialog声明一个对象时,第一个BOOL型参用于指定文件的打开或保存,当为TRUE时将构造一个文件打开对话框,为FALSE时构造一个文件保存对话框。   在构造CFileDialog对象时,如果在参中指定了OFN_ALLOWMULTISELECT风格,则在此对话框中可以进行多选操作。此时要重点注意为此CFileDialog对象的m_ofn.lpstrFile分配一块内存,用于存储多选操作所返回的所有文件路径名,如果不进行分配或分配的内存过小就会导致操作失败。下面这段程序演示了文件打开对话框的使用方法。   CFileDialog mFileDlg(TRUE,NULL,NULL,   OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,   "All Files (*.*)|*.*||",AfxGetMainWnd());   CString str(" ",10000);   mFileDlg.m_ofn.lpstrFile=str.GetBuffer(10000);   str
〉CDIB功能 提供针对设备无关位图的一系列操作。 〉CDIB使用方法 将DIB目录复制到工程的原文件目录中。 在工程的Source Files中添加DIB文件夹,并导入DIB目录中的所有文件。 在需要使用DIB的文件中添加 include "dib.h" using namespace DIB; 1)读取Bitmap图片 //CDib对象可以从读取Bitmap,DIB文件据。 //之前需要创建CFile对象,而后从CFile对象读取据。 CDib m_Dib; CFile* pf; pf=new CFile; pf->Open(m_ImageName,CFile::modeRead); //m_ImageName为路径加文件名,如"C:\\Img\\My_Bitmap.bmp" m_Dib.Read(pf); pf->Close(); delete pf; 2)保存CDib对象到文件 //m_Dib是包含有图像据CDib对象 //pFile 指向已经创建的可对文件进行写操作的CFile对象 m_Dib.write(CFile* pFile) 3)从CDIB获得图像据 //m_Dib 包含有图像据CDib对象 //realDataFLag 选择是返回真实图像据,还是返回灰度据的布尔值变量(bool),为真时返回的是图像真实据。 unsigned char * img; img=m_Dib.GetImgPtr(realDataFLag); //获得的图像据是以左上角为(0,0)点开始的从左至右, //从上至下,具有真实宽度(非补4)的据 //realDataFlag为真时返回的是图像真实据 //realDataFlag为假时返回的是灰度化的图像据 4)将图像据赋给CDib对象 //m_Dib是包含有图像据CDib对象 //img 指向图像据的无符号字符型指针(unsigned char *) //realDataFLag 指明输入的是真实图像据,还是返回灰度据的布尔值变量(bool),为真时输入的是图像真实据。 m_Dib.SetImgPtr(img,realDataFlag);//设置图像据 5)从图像据创建CDib对象 CDib m_Dib m_Dib.CreateDib(pImgData,width,height,nBitCount);//pImgData为指向图象据的指针 //nBitCount一个像素所用的比特 目前仅支持8 6)由CDib对象创建Bitmap对象 //m_Dib是包含有图像据CDib对象 HBITMAP bitmap; CDC * pDC=AfxGetApp()->GetMainWnd()->GetDC(); bitmap=m_Dib.CreateBitmap(pDC)//输入值为 CDC * ,一般可通过AfxGetApp()->GetMainWnd()->GetDC()获得 7)显示图象中的特殊信息 在处理过程中将图像中的特殊信息用251~255表示(对彩色图像,将R、G、B赋予251~255的相同值) 将灰度图象中灰度值大于等于251的不需特殊显示的像素赋为250, 将彩色图像中R=G=B且大于等于251的不需特殊显示的像素赋为(250,250,250) 而后按4)中描述的将图像据赋给CDib对象 最后调用EnhanceColor()将CDib对象转化为可以显示特殊信息的图像

69,337

社区成员

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

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