VC文件操作.doc_第1页
VC文件操作.doc_第2页
VC文件操作.doc_第3页
VC文件操作.doc_第4页
VC文件操作.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VC文件操作1.C语言中文件操作。2.C+语言中的文件操作。3.Win32 API函数文件操作。4.MFC CFile类文件操作。5.MFC CFileDialog类的文件操作。6.注册表文件操作。 下面我来详细说明一下各种文件操作方法:PS:传统的C语言方式 、win32 API函数 和MFC CFile类对文件的操作原理上都是调用底层API,速度都差不多。经测试,MFC 封装的形式略胜一筹。 C+语言中文件操作是最慢的。如果想大幅度的提高文件操作的速度,只有使用内存映射文件。大量数据的情况下考虑用数据库。王 刚1. C语言中文件操作.需要包含的头文件STDIO.H写入文件:FILE *pfile=fopen(C.txt,w);/以写的方式打开C.txt文件。fwrite(Welcome to VCFans!,1,strlen(Welcome to VCFans!),pfile);/将数据写入文件。fflush(pfile);/刷新缓冲区。将缓冲区数据写入文件fclose(pfile);/关闭文件读取文件:FILE *pfile=fopen(C.txt,r);/以读的方式打开C.txt文件。char FileContent100;memset(FileContent,0,100);/初始化FileContentfread(FileContent,1,100,pfile);/将刚才C.txt文件中的内容读入到FileContentMessageBox(FileContent);/输出结果fclose(pfile);/关闭文件2.C+语言中的文件操作。需要包含的头文件fstream.h 写入文件:ofstream ofs(C+.txt);/建立ofstream对像。ofs.write(Welcome to VCFans!,strlen(Welcome to VCFans!);/将数据写入文件ofs.close();/关闭ofstream对象。读取文件:ifstream ifs(C+.txt);char FileContent100;memset(FileContent,0,100);/初始化FileContentifs.read(FileContent,100);/读取数据ifs.close();/关闭ifstream对像MessageBox(FileContent);/输出结果3.Win32 API函数文件操作。需要包含的头文件winbase.h,需要类库:kernel32.lib写入文件: HANDLE hFile;/定义一个句柄。hFile=CreateFile(API.txt, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);/使用CreatFile这个API函数打开文件DWORD Written;WriteFile(hFile,Welcome to VCFans!,strlen(Welcome to VCFans!),&Written,NULL);/写入文件CloseHandle(hFile);/关闭句柄读取文件: HANDLE hFile;/定义一个句柄。hFile=CreateFile(API.txt, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);/使用CreatFile这个API函数打开文件DWORD dwDataLen;char FileContent100;ReadFile(hFile,FileContent,100,&dwDataLen,NULL);/读取数据FileContentdwDataLen=0;/将数组未尾设零。CloseHandle(hFile);/关闭句柄MessageBox(FileContent);/输出结果4.MFC CFile类文件操作。需要包含的头文件afx.h写入文件: CFile file(CFile.txt,CFile:modeCreate| CFile:modeWrite);/构造CFile对象 file.Write(Welcome to VCFans !,strlen(Welcome to VCFans !);/写入数据到文件 file.Close();/关闭CFile对象。读取文件: CFile file(CFile.txt,CFile:modeRead);/构造CFile对象 char FileContent100; memset(FileContent,0,100);/初始化FileContent file.Read(FileContent,100);/读入数据 file.Close();/关闭文件对象 MessageBox(FileContent);/输出数据5.MFC CFileDialog类的文件操作。需要包含的头文件Afxdlgs.h写入文件: CFileDialog fileDlg(FALSE,txt,CFileDialog.txt);/建立CFileDialog对象if(IDOK=fileDlg.DoModal() CFile file(fileDlg.GetFileName(),CFile:modeCreate| CFile:modeWrite);/构造CFile对象 file.Write(Welcome to VCFans !,strlen(Welcome to VCFans !);/写入数据到文件 file.Close(); ;读取文件: CFileDialog fileDlg(TRUE,txt,CFileDialog.txt);/建立CFileDialog对象if(IDOK=fileDlg.DoModal() CFile file(fileDlg.GetFileName(),CFile:modeRead);/构造CFile对象 char FileContent100; memset(FileContent,0,100);/初始化FileContent file.Read(FileContent,100);/读入数据 file.Close();/关闭文件对象 MessageBox(FileContent); ;6.注册表文件操作。 写入注册表: HKEY hKey; DWORD dwSex=1; RegCreateKey(HKEY_LOCAL_MACHINE,Softwarevcfansreg,&hKey);/打开注册表键 RegSetValueEx(hKey,sex,0,REG_DWORD,(CONST BYTE*)&dwSex,4);/写入注册表数据 RegCloseKey(hKey);/关闭注册表键读注册表: HKEY hKey; RegOpenKey(HKEY_LOCAL_MACHINE,Softwarevcfansreg,&hKey);/打开注册表键 DWORD dwType; DWORD dwValue; DWORD dwSex; RegQueryValueEx(hKey,sex,0,&dwType,(LPBYTE)&dwSex,&dwValue);/查询注册表数据 RegCloseKey(hKey);/关闭注册表键 CString str; str.Format(sex=%d,dwSex); MessageBox(str);/以上代码在VC6.0,Windows 2K server下编译通过在Visual C+中使用fopen()函数来读写文件 添加记录: 类别: VC语言 发布日期: 01月01日 在Visual C+中使用fopen()函数来读写文件 很多使用过Turbo C的朋友喜欢用fopen()函数来读写文件,在Visual C+环境中您也可以使用fopen()来读写文件。而且您还可以使用Visual C+中的标准的打开文件对话框,这样可以使选取读写文件的路径更方便。具体的做法是这样的。 首先您需要使用到MFC基本类库,在您原有的Visual C+程序中加上一个由CFileDialog类派生的新类,例如是CMyFileDialog,然后用这个新类定义一个对象,例如是:myDlg,使用这个对象的DoModal()方法,就可以呼出打开文件的对话框。这样,您只要把被选中的路径名及文件名传送给fopen()函数就可以打开读写这个文件了。 CMyFileDialog myDlg(true); 定义一个对话框对象 myDlg.DoModal(); 呼出打开文件对话框 CString fileName; 定义一个Cstring类型的字符串来存储文件的路径及文件名 fileName=myDlg.GetPathName(); 得到文件的路径及文件名 由于fopen()函数中需要的文件名参数是字符型的,所以我们还需要把CString类型的文件名转换为字符类型的变量。 int i, length; 定义i作为循环变量,定义length作为文件路径及文件名的长度 Char* FileName; 定义char型的字符指针来存储文件名,给fopen()函数使用 length=fileName.GetLength(); 把文件名的长度赋给length变量 FileName=new charlength; 给char型的指针变量FileName分配内存空间 for(i=0;ilength;i+) 把CString型变量fileName中的字符一个一个地赋给char型的指针变量FileName *(FileName+i)=fileName.GetAt(i); *(FileName+length)=NULL; 在FileName变量的最后加上一个结束标志 这样,您就要吧使用fopen(FileName,w)来写文件,或者是用fopen(FileName,r)来读文件了。FileName就是使用打开文件对话框得到的文件路径及文件名。 各种关于文件的操作在程序设计中十分常见,如果能对这些操作都了如指掌,就可以根据实际情况找到最佳的解决方案,从而可以在较短的时间内编写出高效的代码。本文对Visual C+中有关文件操作进行了全面的介绍,并对在文件操作中经常遇到的一些疑难问题进行了详细分析。1 文件的查找当对一个文件操作时,如果不知道该文件是否存在,就要首先进行查找。MFC中有一个专门用来进行文件查找的类“CFileFind”,使用它可以方便快捷地进行文件的查找。下面这段代码演示了这个类的最基本使用方法。CString strFileTitle;CFileFind finder;BOOL bWorking = finder.FindFile(“C:windowssysbkup*.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.ReleaseBuffer();POSITION mPos=mFileDlg.GetStartPosition();CString pathName(“ ”, 128);CFileStatus status;while(mPos!=NULL)pathName=mFileDlg.GetNextPathName(mPos);CFile:GetStatus(pathName, status);3 文件的读写文件的读写非常重要,下面将重点进行介绍。文件读写最普通的方法是直接使用“CFile”类进行,如文件的读写可以使用下面的方法:/对文件进行读操作char sRead2;CFile mFile(_T(“user.txt”),CFile:modeRead);if(mFile.GetLength()2)return;mFile.Read(sRead,2);mFile.Close();/对文件进行写操作CFile mFile(_T(“user.txt”), CFile:modeWrite|CFile:modeCreate);mFile.Write(sRead,2);mFile.Flush();mFile.Close();虽然这种方法最为基本,但是它使用烦琐,而且功能非常简单。这里推荐的是使用“CArchive”,它的使用方法简单且功能十分强大。首先还是用“CFile”声明一个对象,然后用这个对象的指针做参数声明一个“CArchive”对象,这样就可以非常方便地存储各种复杂的数据类型了。它的使用方法见下例:/对文件进行写操作CString strTemp;CFile mFile;mFile.Open(“d:ddtry.TRY”,CFile:modeCreate|CFile:modeNoTruncate|CFile:modeWrite);CArchive ar(&mFile,CArchive:store);arstrTemp;ar.Close();mFile.Close();“CArchive”的“”操作符用于简单数据类型的读写,对于“CObject”派生类的对象的存取要使用ReadObject()和WriteObject()。使用“CArchive”的ReadClass()和WriteClass()还可以进行类的读写,如:/存储CAboutDlg类ar.WriteClass(RUNTIME_CLASS(CAboutDlg);/读取CAboutDlg类CRuntimeClass*mRunClass=ar.ReadClass();/使用CAboutDlg类CObject* pObject=mRunClass-CreateObject();(CDialog* )pObject)-DoModal();虽然VC提供的文档/视结构中的文档也可进行这些操作,但是不容易理解、使用和管理,如果要进行的文件操作只是简单的读写整行的字符串,建议使用“CStdioFile”,用它来进行此类操作非常方便,如下例:CStdioFile mFile;CFileException mExcept;mFile.Open( “d:tempaa.bat”, CFile:modeWrite, &mExcept);CString string=“I am a string.”;mFile.WriteString(string);mFile.Close();4临时文件的使用正规软件经常用到临时文件,经常可以看到“C:WindowsTemp”目录下有大量的扩展名为“.tmp”的文件,这些就是程序运行时建立的临时文件。临时文件的使用方法基本与常规文件一样,只是文件名应该调用函数GetTempFileName()获得。它的第一个参数是建立此临时文件的路径,第二个参数是建立临时文件名的前缀,第四个参数用于得到建立的临时文件名。得到此临时文件名以后,就可以用它来建立并操作文件了,如:char szTempPath_MAX_PATH,szTempfile_MAX_PATH;GetTempPath(_MAX_PATH, szTempPath);GetTempFileName(szTempPath,_T (“my_”),0,szTempfile);CFile m_tempFile(szTempfile,CFile: modeCreate|CFile: modeWrite);char m_char=a;m_tempFile.Write(&m_char,2);m_tempFile.Close();5文件的复制、删除等MFC中没有提供直接进行这些操作的功能,因而要使用SDK。SDK中的文件相关函数常用的有CopyFile()、CreateDirectory()、DeleteFile()、MoveFile()。它们的用法很简单,可参考MSDN。STL文件操作技术 2010-01-04 11:01:04 阅读123 评论0 字号:大中小订阅 stl提供c+流的文件操作,效率比c语言的高,使用起来非常方便。列一段源代码,功能是将两个文件的内容写到一个文件中,为以后的多个文件压缩打包做一点铺垫。#include #include using namespace std;int main( )fstream wFileStream;fstream rFileStream, rFileStream2;rFileStream.open( 1.txt, ios:in | ios:binary );if( !rFileStream )cout 打开源文件失败! endl;return 1;wFileStream.open( 3.txt, ios:out | ios:app | ios:binary );if( !wFileStream )cout 打开目标文件失败! endl;return 1;char ch;while( rFileStream.get( ch ) )wFileStream ch;wFileStream rn;rFileStream.close( );rFileStream.clear( ios:goodbit );rFileStream.open( 2.txt, ios:in | ios:binary );if( !rFileStream )cout 打开源文件失败 endl;while( rFileStream.get( ch ) )wFileStream ch;rFileStream.close( );wFileStream.close( );return 0;注意几个问题: 1.使用同一个stream打开多个文件的时候,close()以后要clear文件流的状态,rFileStream.clear( ios:goodbit );否则下一次open则打开失败!2.二进制文件的换行符是rn。3.将文件内容拷贝到另一个文件还有其他方法。下面转载自/qinghuaboy/archive/2009/09/07/95471.html详细内容: 方法1:逐行复制#include #include std:ifstream input(in,ios:binary);std:ofstream output(out,ios:binary);std:string line;while (getline(input,line) output line n;注意:这里的代码有一个小小的缺陷,如果文件不是纯文本格式的文件,或者文本文件的最后没有换行符,那么会导致复制后的文件末尾添加了一个多余的换行符。方法2:迭代器复制#include #include #include std:ifstream input(in,ios:binary);std:ofstream output(out,ios:binary);input.unsetf(ios:skipws);copy(istream_iterator(input),istream_iterator(),ostream_iterator(output,);同样这里也有一个小技巧,输入流的格式默认为跳过空白字符,因此调用unsetf取消这个格式,才可保证正确的复制。方法3:缓冲区复制#include std:ifstream input(in,ios:binary);std:ofstream output(out,ios:binary);output input.rdbuf();这里直接使用了输入流的缓冲区,因此没有引入额外的临时对象。很显然,上述四种方法中,最后一种方法最简洁,由于直接操作输入流的缓冲区,从运行效率上来说,也比其他方法有着略微的优势(当然,由于操作系统可能提供了额外的基于设备的文件缓冲机制,也许你无法证实这一点)。因此,除非要对输入内容进行处理,直接复制文件推荐最后一种方法,既不容易出错,又能获得良好的性能。STLC+FILE类语言文件系统称为流文件(Stream),正文流(正文文件),二进制流(二进制文件)缓冲与非缓冲文件顺序操作文件与随机操作文件顺序文件:读/写第K个数据块之前必须读/写第1至K-1个数据块;随机文件:可直接读/写第K个数据块;正文文件的操作一般是顺序文件;二进制文件的操作都是随机文件。一、文件操作的一般过程定义文件指针 FILE *打开文件 fopen对文件进行读写二、系统已定义的与文件操作有关的数据结构全都在stdio.h中FILE 结构体 FILE *fr,*fp,*fw;FILE* 指针作为文件句柄,是文件访问的唯一标识,它由fopen函数创建,fopen打开文件成功,则返回一个有效的FILE*指针,否则返回空指针NULL标准文件指针 FILE *stdin,*stdout,*stderr, stdin 指键盘输入 stdout 指显示器 stderr 指出错输出设备,也指显示器这些变量已成功初始化,可直接使用.三、常用操作函数fopen格式:FILE *fopen(文件名字符串,打开方式串)例:FILE *fr; fr=fopen(c:userabc.txt,r);字符串操作:1)r或rt:正文文件只读方式打开。文件不存在,则打开失败(顺序读)w或wt:正文文件只写方式打开。若文件不存在,则建立文件;若文件存在,则删除文件内容,重建空文件(顺序写);(截取文件长度为0)2) a或at:正文文件添加方式。文件不存在,则建立文件(顺序添加写)3) r+或rt+:正文文件读写打开,文件不存在,则打开失败(顺序读/写、随机读/写,含改写与添加);4) w+或w+:正文文件读写方式打开,文件不存在,则建立文件;否则截取文件长度为0(顺序读/写,随机读/写,对写入的内容可以读或改写或添加)5) b:正文文件二进制文件 顺序读顺序/随机读(“rb”) eg:r或rtrb 顺序写(wb) 顺序添加写(ab) 顺.,随.,含.(rb+) 顺.,添加(wb+) 顺.,添加(ab+)使用fopen时,但凡含r字母的打开方式,一定要加判断,文件是否打开成功,否则程序不会报告错误,会运行下去。如:FILE *fr;fr=fopen(abc.txt,r);if(fr=NULL)printf(File not open!n);return;文件关闭fclose(FILE *fp)一般地,fclose(fp)与fopen应配对使用,特别是含有写方式的文件,若不关闭会造成文件数据丢失。fcloseall(void):关闭当前所有打开的文件。单字节的输入函数可适用于二进制与正文文件操作int fgetc(FILE *fp) int fputc(char ch.FILE *fp)fgetc的返回值都是正数(0255)文件无可读字节则返回-1(EOF)正文文件与二进制文件读写的区别:正文文件读到13 10时,将自动跳过13,读出10并返回;正文文件写入10时,首先自动写入13再写入10.文件指针与文件指针操作函数文件指针是文件操作系统数据结构内部的一种数据指针,它用于标注文件当前读写位置,C语言中,文件指针以字节为单位,文件第一个字节位置号为0,若文件长度为N个字节,则最后一个字节的位置号为N-1,长度为N字节的文件有效读写范围为0N-1。指针位置在此之外进行读/写操作,则失败;读写函数返回-1 (EOF);C语言的文件指针采用long型值;执行文件读/写操作后,文件指针自动向后移动,指到新的待读/写位置。文件指针移动函数rewind(FILE *fp)文件指针重置为0fseek(FILE *fp,long off,int pos) 从pos位置开始,移动off个字节。pos: 0 文件开始 1 文件当前指针位置 2 文件结尾(文件长度为N,则指针位置为N)例:fseek(fp,0l,0);rewind(fp)fseek(fp,-1L,2);fseek(fp,-2L,1);long fte

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论