MFC-txt文件读写
MFC读写.txt文件时进度条显示实时进度

MFC读写.txt⽂件时进度条显⽰实时进度 整体实现⽅式:先获得⽂件长度,然后⽤每次读取的长度,计算出完成的百分⽐,⽤百分⽐的值设置进度条。
⼀、MFC进度条 Progress Control 相关函数1. create() ——创建Progress Control 针对不是通过资源⽂件上拖拉进度条控件⽣成的进度条,需要⽤此函数创建⼀个。
2. SetRange() —— 设置进度条范围 设置进度条的起始值和终⽌值。
(不管拖拽还是创建都要设置此,在初始化中)3. SetPos() —— 设置当前值 设置进度条的当前位置(值)。
4. OffSetPos() —— 偏移⼀段位置 移动进度条⼀段距离(动态移动,如果不做延时,默认速度移动)5. SetStep() —— 设置步长 设置进度条偏移⼀次的长度,⼀般与StepIt搭配使⽤6. StepIt() —— 更新步长位置 按照步长来更新位置。
7.GetPos() —— 得到当前值 获得进度条当前值。
⼆、⽰例 1. ⾸先在初始化函数中设置范围和当前初始值CProgressCtrl* pProg = (CProgressCtrl*)GetDlgItem(IDC_PROGRESS);pProg->SetRange(0, 100);pProg->SetPos(0); 2. 获取⽬标txt⽂件的总⾏数while(!feof(fOpenFile)) {if(fgets(szBuf, sizeof(szBuf) - 1, fOpenFile)) {nRowOfTotalNum++;}}nRowOfTotalNum++;fseek(fOpenFile, 0, SEEK_SET); 这⾥,读取完总⾏数后,要将⽂件指针指向⽂件头。
3. 获取当前读取进度的⾏数,计算出完成的百分⽐,⽤百分⽐的值设置进度条。
fRowOfCurrentNum = nRowOfCurrentNum;fRowOfTotalNum = nRowOfTotalNum;fProPos = (fRowOfCurrentNum / fRowOfTotalNum) * 100.00;nProPos = fProPos;cProFileCtl.SetPos(nProPos); PS:SetPos()只能接受int型变量,⽽计算后的进度⼜要使⽤Float类型进⾏保存计算,所以这⾥要特别注意各个变量之间计算时的类型转换问题,否则会⼀直出现Pos为0⽽进度条始终没有反应的情况。
mfc文件操作个人总结

MFC文件操作一,打开文件对话框CString szFilters=_T("txt Files (*.txt)");CFileDialog fileDlg(TRUE, _T("txt"), _T("*.txt"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilters, NULL);if(fileDlg.DoModal() == IDOK){CString filestr;filestr = fileDlg.GetPathName(); //得到打开的文件的全路径+后缀};二,打开文件CFile::CFile( LPCTSTR lpszFileName, UINT nOpenFlags ); //CFile构造lpszFileName文件名nOpenFlags 打开方式,有:CFile::modeCreate:以新建方式打开,如果文件不存在,新建;如果文件已存在,把该文件长度置零,即清除文件原有内容。
CFile::modeRead:只读。
CFile::modeWrite:只写。
CFile::modeReadWrite:以读写方式打开文件。
CFile::modeNoTruncate:以追加方式打开,如果文件存在,打开并且不将文件长度置零,如果文件不存在,会抛出异常。
一般与CFile::modeCreate一起使用,则文件不存在时,新建一个文件;存在就进行追加操作(其追加是从起始位置进行覆盖式追加的,所以要与定位配合操作)。
例:1,利用CFile的构造函数打开文件filestr = _T("C:\\Users\\zktw\\Desktop\\new.txt");//或用一中获得的路径CFile RWFile(filestr,CFile::modeCreate | CFile::modeReadWrite | CFile::modeNoTruncate); 例2:利用CFile的成员函数CFile myfile;Myfile.open(_T(“路径”), CFile::modeCreate | CFile::modeReadWrite | CFile::modeNoTruncate);三,文件读写操作读操作CFile::Read( void* lpBuf, UINT nCount ); 从lpBuf指向的地址开始读取nCount 个字节,指针也自动下移nCount写操作CFile::Write( const void* lpBuf, UINT nCount ); 向lpBuf指向的内存地址写入nCount 个字节,指针也自动下移nCount四,定位CFile::Seek( LONG lOff, UINT nFrom );从指定位nFrom置偏移lOff字节.nFrom 有三种方式,如:CFile::begin 从文件开始移动CFile::current从当前位置移动CFile::end 从文件末位移动,此时lOff为负值. 例:CFile::Seek(0, CFile::end); //定位文件尾五,关闭打开的文件CFile::Close(); //关闭文件,删除对象,再次对文件读写时必须重新定义对象六,查找文件是否存在(CFileFind的成员函数)CString strFileTitle;CFileFind finder;BOOL bWorking = finder.FindFile(_T("C:\\Users\\zktw\\Desktop\\new.txt"));if(bWorking){AfxMessageBox(_T(“文件已存在”);}elseAfxMessageBox(_T(“文件不存在”));finder.close(); //结束查找请求释放资源,但是再次发出查找请求时不需要重新定义//CFileFind对象如下:bWorking = finder.FindFile(_T("C:\\Users\\zktw\\Desktop\\new1.txt"));。
MFC-txt文件读写

文本文件的读写正确的文本文件读写过程1.定义文件变量;2.打开指定的文件;3.向从文本文件中写入信息;4.从文本文件中读取信息;5.关闭文件1、定义文件变量定义文件变量格式:CStdioFile 文件变量;例如,定义一个名称为f1的文件变量,语句如下:CStdioFile f1;2、打开指定文件可以直接通过CStdioFile的构造函数来打开磁盘文件,同时可以用标志位指定打开方式(只读、只写、读写等):CStdioFile(LPCTSTR lpszFileName,UINT nOpenFlags);其中,lpszFileName表示要打开的文件名,可以是相对路径或绝对路径nOpenFlags设置文件打开方式标志位,可以指定用“|”连接多个标志位。
下面是常用的打开标志:CFile::typeText:以文本文件的形式打开文件CFile::typeBinary:以二进制文件的形式打开文件CFile::modeCreate:如果指定文件名的文件不存在,则新建文件;如果文件存在并且没有设置CFile::modeNoTruncate标志,则清空文件。
CFile::modeNoTruncate:如果文件存在,不把它的长度删除为0(即不清空文件中的数据)。
:以只读方式打开文件CFile::modeReadWrite:以可读可写方式打开文件CFile::modeWrite:以只写方式打开文件CFile::shareDenyNone:文件打开后,不禁止其他进程对文件的读写操作CFile::shareExclusive:文件打开后,禁止其他进程对文件的读写操作CFile::shareDenyRead:文件打开后,禁止其他进程对文件的读操作CFile::shareDenyWrite:文件打开后,禁止其他进程对文件的写操作此外,可以不在构造函数中打开文件,而仅仅调用空的构造函数CStidoFile(),然后用CStdioFile::Open()打开文件。
C、C++和MFC中文件的读写方法

C、C++和MFC中文件的读写方法对文件读写的三种方法1.C中FILE *pFile=fopen("1.txt","w");fwrite("",1,strlen(""),pFile");//fseek(pFile,0,SEEK_SET);//fwrite("ftp:",1,strlen("ftp:"),pFile);//fwrite("",1,strlen(""),pFile");fclose(pFile);*///fflush(pFile);表头文件 #include<stdio.h>获取文件长度的方法:FILE *fp = fopen(filePath, "r");fseek(fp, 0, SEEK_END);//先移动到文件结尾处n = ftell(fp);fclose(fp);各个函数说明:FILE * fopen(const char * path,const char * mode);函数说明参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。
mode有下列几种形态字符串:int fseek( FILE *stream, long offset, int origin );第一个参数stream为文件指针第二个参数offset为偏移量,整数表示正向偏移,负数表示负向偏移第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SETSEEK_CUR:当前位置SEEK_END:文件结尾SEEK_SET:文件开头其中SEEK_CUR,SEEK_END和SEEK_SET依次为1,2和0int fwrite(buffer,size,count,fp);(1)buffer:是一个指针,对fwrite来说,是要输出数据的地址。
使用MFC读取大文件

使用MFC读取大文件VC读取大文件VC++中使用内存映射文件处理大文件摘要:本文给出了一种方便实用的解决大文件的读取、存储等处理的方法,并结合相关程序代码对具体的实现过程进行了介绍。
引言文件操作是应用程序最为基本的功能之一,Win32 API和MFC均提供有支持文件处理的函数和类,常用的有Win32 API的CreateFile()、WriteFile()、ReadFile()和MFC提供的CFile类等。
一般来说,以上这些函数可以满足大多数场合的要求,但是对于某些特殊应用领域所需要的动辄几十GB、几百GB、乃至几TB的海量存储,再以通常的文件处理方法进行处理显然是行不通的。
目前,对于上述这种大文件的操作一般是以内存映射文件的方式来加以处理的,本文下面将针对这种Windows核心编程技术展开讨论。
内存映射文件内存映射文件与虚拟内存有些类似,通过内存映射文件可以保留一个地址空间的区域,同时将物理存储器提交给此区域,只是内存文件映射的物理存储器来自一个已经存在于磁盘上的文件,而非系统的页文件,而且在对该文件进行操作之前必须首先对文件进行映射,就如同将整个文件从磁盘加载到内存。
由此可以看出,使用内存映射文件处理存储于磁盘上的文件时,将不必再对文件执行I/O操作,这意味着在对文件进行处理时将不必再为文件申请并分配缓存,所有的文件缓存操作均由系统直接管理,由于取消了将文件数据加载到内存、数据从内存到文件的回写以及释放内存块等步骤,使得内存映射文件在处理大数据量的文件时能起到相当重要的作用。
另外,实际工程中的系统往往需要在多个进程之间共享数据,如果数据量小,处理方法是灵活多变的,如果共享数据容量巨大,那么就需要借助于内存映射文件来进行。
实际上,内存映射文件正是解决本地多个进程间数据共享的最有效方法。
内存映射文件并不是简单的文件I/O操作,实际用到了Windows 的核心编程技术--内存管理。
所以,如果想对内存映射文件有更深刻的认识,必须对Windows操作系统的内存管理机制有清楚的认识,内存管理的相关知识非常复杂,超出了本文的讨论范畴,在此就不再赘述,感兴趣的读者可以参阅其他相关书籍。
MFC文件读取

MFC文件读取MFC文件读取技术(1)计算机是如何管理自身所存放着大量的信息的呢?windows 的磁盘管理程序为我们提供了一套严密而又高效的信息组织开工--- 硬盘上的信息是以文件的形式被管理的。
面向存储的文件技术什么是文件?计算机中,一篇文章、一幅图画、一个程序、一首歌曲等都是以文件的形式存储在磁盘上的,每个文件都有一个文件名。
计算机就是对文件按名存取的。
文件名的格式如下:主文件名 . 扩展名文件名由主文件名和扩展名两部分组成,中间用小圆点隔开,其中扩展名可以省略。
而扩展名是用来区分文件类型的。
Windows 为了区分文件的类型,一些软件系统会自动给文件加上“ .wps ”扩展名;画图程序画的图像文件一般为“ .bmp ”等。
在windows 中,主文件名可以由英文字符、汉字、数字以及一些符号等组成,但不能使用+<>*?\ 等符号。
什么是文件夹?在计算机中存放着数以万计的文件,为了便于管理这些文件,就像我们把文件分类放到不同的抽屉中便于查阅一样,在计算机中也有像抽屉的东西,它就是文件夹。
文件夹也要有一个名字,取名的原则与文件的取名类似,只是不用再区分文件夹的类型,当文件夹多了以后,还可以把某些文件夹归到一个大文件夹中去。
久而久之,就构成了计算机中庞大的磁盘文件结构。
为什么要在程序中使用文件?通常,程序中的数据在程序运行结束后,就会从内存中清除,再次运行程序时不会自动出现。
在编制程序的过程中不可避免地会遇到将某些数据永久保存的问题,当关闭程序后,依然可以使用这些数据,这时就需要进行文件操作。
文件类型Visual c++ 处理的文件通常分为两种:文本文件:只可被任意文本编辑器读取ASCII 文本。
二进制文件:指对包含任意格式或无格式数据的文件的统称。
这里只介绍文本文件的读写,INI 文件也属于文本文件的范畴,且INI 文件的结构和用途与普通的文本文件不同,所以会单独介绍。
VC读写txt文件

C++读写文本文件#include <iostream>#include <fstream>using namespace std;int main(){const char filename[] = "mytext.txt";ofstream o_file;ifstream i_file;string out_text;//写o_file.open(filename);for (int i = 1; i <= 10; i++){o_file << "第" << i << "行\n"; //将内容写入到文本文件中}o_file.close();//读i_file.open(filename);if (i_file.is_open()){while (i_file.good()){i_file >> out_text; //将读取的内容存储到变量out_text中cout << out_text << endl; //在控制台输出读取的内容。
为什么最后一行的内容会出现两次}}elsecout << "打开文件:" << filename << " 时出错!";i_file.close();system("PAUSE");return 0;}为什么总会将最后一行显示两遍?我的循环似乎没错呀。
笔记:C++文件的读取和写入exit(1);// terminate with error}if(!outfile){cout<<"Unable to open otfile";exit(1);// terminate with error}int a,b;int i=0,j=0;int data[6][2];while(! myfile.eof()){myfile.getline(buffer,10);sscanf(buffer,"%d %d",&a,&b);cout<<a<<" "<<b<<endl;data[i][0]=a;data[i][1]=b;i++;}myfile.close();for(int k=0;k<i;k++){outfile<<data[k][0]<<" "<<data[k][1]<<endl;cout<<data[k][0]<<" "<<data[k][1]<<endl; }outfile.close();return 0;}无论读写都要包含<fstream>头文件读:从外部文件中将数据读到程序中来处理对于程序来说,是从外部读入数据,因此定义输入流,即定义输入流对象:ifsteam infile,infile就是输入流对象。
MFC和C++关于文件的读写操作以及文件的打开和保存

MFC和C++关于文件的读写操作以及文件的打开和保存通过近来的学习,总结一下关于C++开发中文件的读写操作以及文件的打开和保存的方法。
一、文件的读写操作:(1)C语言对文件的读写操作在C语言中,对文件的读写操作是用FILE结构体和常用的对文件操作的函数实现的,下面总结一下C语言中对文件操作的常用函数:fopen() 打开以文件名指定的文件fwrite() 写文件fread() 读文件fseek() 移动文件的指针到新的位置通过该函数的参数设定的偏移量和初始位置rewind() 移动文件的指针到文件流的开始位置,在通常情况下可用fseek()实现相同的功能,但二者有区别ftell() 获得当前文件指针的位置,常用该函数获得文件的文件流的长度fflush() 刷新缓冲区中的内容,当文件写入时直接将文件流的内容从缓冲区写入磁盘,当读取文件时直接将磁盘文件写入缓冲区,而不必等程序运行结束或关闭程序。
fclose() 关闭文件memset() 在一段内存块中填充某个给定的值示例代码如下:/*********************************************************** C语言实现文件写操作 ************************************************************/FILE *pFile=fopen("CLanguage.txt","w");fwrite("CLanguage",1,strlen("CLanguage"),pFile);//fseek(pFile,0,SEEK_SET);//fwrite("实现文件写操作",1,strlen("实现文件写操作"),pFile);fclose(pFile);/*********************************************************** C语言实现文件读操作 ************************************************************/FILE *pFile=fopen("CLanguage.txt","r");//char ch[100];//memset(ch,0,100);//fread(ch,1,100,pFile);//MessageBox(ch);char* pBuf;int length;fseek(pFile,0,SEEK_END);length=ftell(pFile);pBuf=new char[length+1];//fseek(pFile,0,SEEK_SET);rewind(pFile);fread(pBuf,1,length,pFile);pBuf[length]=0;MessageBox(pBuf);fclose(pFile);注意:在用C语言实现文件的读操作时,要注意文件的指针位置。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
文本文件的读写正确的文本文件读写过程1.定义文件变量;2.打开指定的文件;3.向从文本文件中写入信息;4.从文本文件中读取信息;5.关闭文件1、定义文件变量定义文件变量格式:CStdioFile 文件变量;例如,定义一个名称为f1的文件变量,语句如下:CStdioFile f1;2、打开指定文件可以直接通过CStdioFile的构造函数来打开磁盘文件,同时可以用标志位指定打开方式(只读、只写、读写等):CStdioFile(LPCTSTR lpszFileName,UINT nOpenFlags);其中,lpszFileName表示要打开的文件名,可以是相对路径或绝对路径nOpenFlags设置文件打开方式标志位,可以指定用“|”连接多个标志位。
下面是常用的打开标志:CFile::typeText:以文本文件的形式打开文件CFile::typeBinary:以二进制文件的形式打开文件CFile::modeCreate:如果指定文件名的文件不存在,则新建文件;如果文件存在并且没有设置CFile::modeNoTruncate标志,则清空文件。
CFile::modeNoTruncate:如果文件存在,不把它的长度删除为0(即不清空文件中的数据)。
:以只读方式打开文件CFile::modeReadWrite:以可读可写方式打开文件CFile::modeWrite:以只写方式打开文件CFile::shareDenyNone:文件打开后,不禁止其他进程对文件的读写操作CFile::shareExclusive:文件打开后,禁止其他进程对文件的读写操作CFile::shareDenyRead:文件打开后,禁止其他进程对文件的读操作CFile::shareDenyWrite:文件打开后,禁止其他进程对文件的写操作此外,可以不在构造函数中打开文件,而仅仅调用空的构造函数CStidoFile(),然后用CStdioFile::Open()打开文件。
Open函数的前两个参数和非空构造函数的参数相同,其声明如下:BOOL Open(LPCTSTR lpszFileName,UINT nOpenFlags,CFileException* pError=NULL);第3个参数与打开失败时的异常处理有关。
实例1:以只读方式打开一个文件步骤:使用AppWizard创建一个对话框应用程序,删除其自动产生的所有控件,添加一个Button 控件。
双击控件,在相应的函数里添加代码:char * pszFileName="C:\\myfile.txt";CStdioFile myFile;CFileException fileException;if(!myFile.Open(pszFileName,CFile::modeCreate|CFile::typeText|CFile::modeRead),&file Exception){TRACE("Can't open file %s, error = %u\n",pszFileName,fileException.m_cause);}运行结果:如果C:\下没有myfile.txt文件,则新生成该文件。
3.向从文本文件中写入信息CStdioFile提供了函数WriteString来向文本文件中写入文本,WriteString函数的格式如下:void WriteString(LPCTSTR lpsz);WriteString的参数lpsz是一个以”\0”字符结束的字符串,要把这个字符串的内容写入文件。
提示:使用WriteString函数时,如果希望每执行一次WriteString,文本文件中的内容就会自动换行一次,那么就需要在需要换行的地方输出“\n”:myFile.WriteString(“第1行\n”);实例2:向文件中写入文本建立MFC基于对话框的程序,删除自动添加的所有控件,添加一个“确定”按钮,双击按钮,按默认添加事件函数,双击按钮,在相应的函数处添加如下代码:char* pszFileName="C:\\myfile.txt";CStdioFile myFile;CFileException fileException;if(myFile.Open(pszFileName,CFile::typeText|CFile::modeCreate|CFile::modeReadWrite), &fileException){myFile.WriteString("第1行\n");CString strOrder;strOrder.Format("%d,%.3f",66,88.88);myFile.WriteString(strOrder);}else{TRACE("Can't open file %s,error=%u\n",pszFileName,fileException.m_cause);}程序运行结果:C:\myfile.txt文件中内容如下:第1行66,88.8804.从文本文件中读取信息CStidoFile提供了函数ReadString来读取文本,ReadString有两种形式,一种为:virtual LPTSTR ReadString(LPTSTR lpsz, UINIT nMax);ReadString函数的参数如下:lpsz :是用户提供的一个指向字符串的指针,它用来接受从文件读出的文本,以”\0”结束。
nMax是本次所允许读入的文本字符个数,不计“\0”字符,也就是说最多能读入nMax-1个文本字符。
ReadString的返回值是一个LPTSTR类型的指针,它指向从文件读出的文本字符串,如果到达文件尾,则返回NULL。
ReadString的另一种形式为:BOOL ReadString(CString& rString);参数rString用来容纳从文件读出的文本。
CString版本忽略回车换行符,返回值是一个布尔值。
如果返回值为FALSE,表示因到达文件尾而没有读到任何字符。
提示:每执行一次ReadString,就会自动从文本文件中读取一行数据,同时文件操作指针会自动跳转到下一行。
实例3:从文件中读取文本信息步骤:创建基于对话框的MFC程序,删除所有自动添加的控件,添加按钮控件,为按钮添加事件,并在相应的函数处,添加如下代码:char* pszFileName="C:\\myfile.txt";CStdioFile myFile;CFileException fileException;if(myFile.Open(pszFileName,CFile::typeText|CFile::modeReadWrite),&fileException){myFile.SeekToBegin();CString str1;myFile.ReadString(str1);CString str2;myFile.ReadString(str2);AfxMessageBox(str1+str2);}else{TRACE("Can't open file %s,error=%u\n",pszFileName,fileException.m_cause);}myFile.Close();5.关闭文件对文件的操作完成后,使用CloseFile关闭文件。
函数CStdioFile::Close关闭一个文件,一般一个文件使用完毕就应该关闭它:myFile.Close();错误的文本文件读写过程在读写文本文件的时候,最常见的错误是---操作文件不存在。
这种错误产生的典型原因有:1.路径错误char * pszFileName="C:\\Windows\\MyFile.txt";CStdioFile myFile;CFileException fileException;if(!myFile.Open(pszFileName,CFile::modeCreate|CFile::typeText|CFile::modeReadWrite) ,&fileException){//文件操作代码}else{TRACE("Can't open file %s, error = %u\n",pszFileName,fileException.m_cause);}myFile.Close();由于将文件变量与一个绝对路径的文件名关联,而程序的数据通常存储在相对路径下,所以一旦相对路径和相对路径不一致时,就会出错。
举例而言,上一段程序本意是想从windows的安装目录下面的MyTextFile.txt文件中读取一行数据,但是如果操作系统安装的路径不是C:\Windwos,而是C:\Winnt,那么这段程序就会出错。
解决方法是在程序中使用相对路径,改正后的程序如下://获取windows路径LPTSTR lpBuffer=new char[MAX_PATH];::GetWindowsDirectory(lpBuffer,MAX_PATH);strcat(lpBuffer,"\\MyFile.txt");CStdioFile myFile;CFileException fileException;if(myFile.Open(lpBuffer,CFile::typeText|CFile::modeCreate|CFile::modeReadWrite),&fileE xception){//文件操作代码}else{TRACE("Can't open file %s, error = %u\n",pszFileName,fileException.m_cause);}myFile.Close();由于将文件变量与一个绝对路径的文件名关联,而程序的数据通常存储在相对路径下,所以一旦相对路径和相对路径不一致时,就会出错。
举例而言,上一段程序本意是想从windows的安装目录下面的MyTextFile.txt文件中读取一行数据,但是如果操作系统安装的路径不是C:\Windwos,而是C:\Winnt,那么这段程序就会出错。
解决方法是在程序中使用相对路径,改正后的程序如下://获取windows路径LPTSTR lpBuffer=new char[MAX_PATH];::GetWindowsDirectory(lpBuffer,MAX_PATH);strcat(lpBuffer,"\\MyFile.txt");CStdioFile myFile;CFileException fileException;if(myFile.Open(lpBuffer,CFile::typeText|CFile::modeCreate|CFile::modeReadWrite),&fileE xception){//文件操作代码}else{TRACE("Can't open file %s, error = %u\n",pszFileName,fileException.m_cause);}CString strFileTitle="MyFile.txt";CStdioFile myFile;CFileException fileException;if(myFile.Open(strFileTitle,CFile::typeText|CFile::modeReadWrite),&fileException){//文件操作代码myFile.WriteString("测试!");}else{TRACE("Can't open file %s, error = %u\n",pszFileName,fileException.m_cause);}myFile.Close();2.操作文件不存在如果应用程序所有路径下面不存在MyFile.txt文件,那么在WriteString写入信息时就会出错。