您的位置:首页 > 编程语言 > C语言/C++

C\C++文件读写操作

2013-01-21 12:32 513 查看
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 //只能是负数了 也就是只能前向移动


2、打开指定文件

可以直接通过CStdioFile的构造函数来打开磁盘文件,同时可以用标志位指定打开方式(只读、只写、读写等):

CStdioFile(LPCTSTR lpszFileName,UINT nOpenFlags);

其中,lpszFileName表示要打开的文件名,可以是相对路径或绝对路径

nOpenFlags设置文件打开方式标志位,可以指定用“|”连接多个标志位。下面是常用的打开标志:

CFile::typeText:以文本文件的形式打开文件

CFile::typeBinary:以二进制文件的形式打开文件

CFile::modeCreate:如果指定文件名的文件不存在,则新建文件;如果文件存在并且没有设置CFile::modeNoTruncate标志,则清空文件。

CFile::modeNoTruncate:如果文件存在,不把它的长度删除为0(即不清空文件中的数据)。

CFile::modeRead:以只读方式打开文件

CFile::modeReadWrite:以可读可写方式打开文件

CFile::modeWrite:以只写方式打开文件

CFile::shareDenyNone:文件打开后,不禁止其他进程对文件的读写操作

CFile::shareExclusive:文件打开后,禁止其他进程对文件的读写操作

CFile::shareDenyRead:文件打开后,禁止其他进程对文件的读操作

CFile::shareDenyWrite:文件打开后,禁止其他进程对文件的写操作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: