Chinaunix首页 | 论坛 | 博客
  • 博客访问: 236667
  • 博文数量: 40
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 322
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-05 19:46
个人简介

文章分类

全部博文(40)

文章存档

2022年(1)

2018年(2)

2013年(5)

2011年(1)

2010年(14)

2009年(5)

2008年(12)

分类: C/C++

2013-12-25 11:11:45

1.C语言中文件操作。
2.C++语言中的文件操作。
3.Win32 API函数文件操作。
4.MFC CFile类文件操作。
5.MFC CFileDialog类的文件操作。
6.注册表文件操作。 下面我来详细说明一下各种文件操作方法:


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 FileContent[100];
memset(FileContent,0,100);//初始化FileContent
fread(FileContent,1,100,pfile);//将刚才C.txt文件中的内容读入到FileContent
MessageBox(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 FileContent[100];
memset(FileContent,0,100);//初始化FileContent
ifs.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 FileContent[100];
ReadFile(hFile,FileContent,100,&dwDataLen,NULL);//读取数据
FileContent[dwDataLen]=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 FileContent[100];
   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 FileContent[100];
   memset(FileContent,0,100);//初始化FileContent
   file.Read(FileContent,100);//读入数据
   file.Close();//关闭文件对象
   MessageBox(FileContent); 
};





6.注册表文件操作。 
   写入注册表:
   HKEY hKey;
   DWORD dwSex=1;
   RegCreateKey(HKEY_LOCAL_MACHINE,"Software\\vcfans\\reg",&hKey);//打开注册表键
   RegSetValueEx(hKey,"sex",0,REG_DWORD,(CONST BYTE*)&dwSex,4);//写入注册表数据
   RegCloseKey(hKey);//关闭注册表键
读注册表:
   HKEY hKey;
   RegOpenKey(HKEY_LOCAL_MACHINE,"Software\\vcfans\\reg",&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下编译通过





写一个代码出现了问题,fread一个wav文件到一定长度时总是不成功,后来把fopen(m_str_sourcepath,"rt")变成fopen(m_str_sourcepath,"rb")就好了。 
下面是一些文件操作的文章,感谢这些同志…^_^ 
转发:名字忘了,呵呵 
取得文件名 

      CString FilePathName; 
CFileDialog dlg(TRUE);///TRUE为OPEN对话框 ,FALSE为 保存 对话框 
      if(dlg.DoModal()==IDOK) 
      FilePathName=dlg.GetPathName(); 

   相关信息:CFileDialog 用于取文件名的几个成员函数: 
假如选择的文件是C:\WINDOWS\TEST.EXE 
则: 
   (1)GetPathName();取文件名全称,包括完整路径。取回C:\WINDOWS\TEST.EXE 
   (2)GetFileTitle();取回TEST 
   (3)GetFileName();取文件全名:TEST.EXE 
   (4)GetFileExt();取扩展名EXE 
  
打开文件 
CFile file("C:\HELLO.TXT",CFile::modeRead);///只读方式打开 
///CFile::modeRead可改为 CFile::modeWrite(只写),CFile::modeReadWrite(读写),CFile::modeCreate(新建) 
例子: 

    CFile file; 
    file.Open("C:\HELLO.TXT",CFile::modeCreate|Cfile::modeWrite); 
    ... 
    ... 

 移动文件指针 
    file.Seek(100,CFile::begin);///从文件头开始往下移动100字节 
    file.Seek(-50,CFile::end);///从文件末尾往上移动50字节 
    file.Seek(-30,CFile::current);///从当前位置往上移动30字节 
    file.SeekToBegin();///移到文件头 
    file.SeekToEnd();///移到文件尾 

对于CFileDialog 使用可参照下面 
:通用对话框的使用 
    大家都遇到过CFileDialog文件对话框吧,它的参数让人头疼.下面解除大家的头疼. 
    先在使用文件对话框的类的类定义文件中加入对象定义CFileDialog m_MyOpenDialog(TRUE,"avi","*.avi")。随后,在需要使用该对话框的地方加入以下语句: 
    m_MyOpenDialog.Domodal(); 
    就可以预览所有.avi文件. 

    其调用规则为: 
    函数原型: 
    CFileDialog(BOOL bOpenFileDialog,LPCTSTR lpszDefExt=NULL,LPCTSTR lpszFileName=NULL,DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPR OMPT,LPCTSTR lpszFilter=NULL,CWnd * pParentWnd 
=NULL); 
    参数说明: 
    bOpenFileDialog:为TRUE或FALSE。TRUE为打开文件;FALSE为保存文件。 
    lpszDefExt     :为缺省的扩展名。 
    lpszFileName   :为显示在文件名组合框的编辑框的文件名,一般可选NULL 
    dwFlags        :为对话框风格,一般为OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,即隐藏只读选项和覆盖已有文件前提示。 
    LpszFilter     :为下拉列表枢中显示文件类型。 
    pParentWnd     :一般可选NULL。 
例如:在文件类型列表框的编辑框要显示“可执行文件(*.exe)”,而在它的下拉列表框中列出“视频文件(*.avi)、All Files(*.*)”内容,则变量定义如下:CFileDialog m_MyOpenDialog(TRUE,"exe",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"可执行文件(*.exe) | *.exe|视频文件(*.bat) | *.bat |All Files (*.*) | *.* ||",NULL); 
    注:看看没有*.*后的||会是什么效果. 


关于:fseek 
fseek()函数有三个参数 


第一个是文件的指针 


第二个是偏移量  也就是指针移动的字符数   

   //这个参数必须是L类型 

   //如果是负数  表示指针反向移动(向文件头的方向) 


第三个是偏移量的相对开始位置 

0  表示从文件开始处  偏移 L 

1  表示从当前位置    偏移 L 

2  表示从文件末尾    偏移 L  //只能是负数了  也就是只能前向移动 
   | | 管理

阅读(2157) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~