VC中文件操作的几种方式(3,4)
2009-09-01 08:53
453 查看
6.1.3 使用Windows API
Windows API总是显得格外沉重,表6-5是常用的文件读写操作API。
在Windows中,文件操作总是针对一个文件句柄进行的,如:
CreateFile创建一个操作文件的句柄,而其他操作则主要针对这个句柄进行。如下罗列出使用Windows API操作文件的流程。
调用CreateFile ()创建、打开文件,返回一个文件句柄。
通过文件句柄,调用ReadFile()和WriteFile()进行文件操作。
调用CloseHandle()关闭文件句柄。
该流程如图6-4所示。
除了文件操作函数,Windows还提供了用于文件管理的API,包括对文件进行复制、删除等操作,如表6-6所示。
FindFirstFile()和FindNextFile()函数常常被用来配合使用,用以查找文件。它们的原型如下:
现在动手
编写如下程序,体验如何使用Windows API来查找C驱动器根目录下的所有目录和文件。
【程序 6-1】使用Windows API查找文件
运行结果如图6-5所示,它列出了"C:/"根目录下的所有文件及目录。
光盘导读
该项目对应于光盘中的目录"/ch06/FileApiTest"。
6.1.4 使用MFC::CFile
使用HANDLE操作文件显得有点陈腐,CFile封装了Windows系统对文件的操作。可以使用如下语句构造CFile对象:
其中,参数nOpenFlags可能的取值如表6-7所示。
(续表)
此外,CFile提供了一些常用的操作函数,如表6-8所示。
注意最后两个静态函数,其实它们封装了Windows API中关于文件管理的函数。
使用CFile操作文件的流程如下:
构造一个CFile对象。
调用CFile::Open()函数创建、打开指定的文件。
调用CFile::Read()和CFile::Write ()进行文件操作。
调用CFile::Close()关闭文件句柄。
====未完待续====
以上摘自《把脉VC++》第6.1小节的内容 ,转载请注明出处。
如果你想与我交流,请点击如下链接加我为好友:http://student.csdn.net/invite.php?u=113292&c=8913f87cffe7d533
Windows API总是显得格外沉重,表6-5是常用的文件读写操作API。
表6-5 文件读写API | |
函数 | 含义 |
CreateFile | 创建、打开文件,返回文件句柄 |
CloseHandle | 关闭文件句柄 |
ReadFile | 从文件读取数据 |
WriteFile | 向文件写入数据 |
SetFilePointer | 设置文件读写指针 |
LockFile | 锁定文件 |
UnlockFile | 解锁文件 |
HANDLE WINAPI CreateFile( __in LPCTSTR lpFileName, __in DWORD dwDesiredAccess, __in DWORD dwShareMode, __in LPSECURITY_ATTRIBUTES lpSecurityAttributes, __in DWORD dwCreationDisposition, __in DWORD dwFlagsAndAttributes, __in HANDLE hTemplateFile );
CreateFile创建一个操作文件的句柄,而其他操作则主要针对这个句柄进行。如下罗列出使用Windows API操作文件的流程。
调用CreateFile ()创建、打开文件,返回一个文件句柄。
通过文件句柄,调用ReadFile()和WriteFile()进行文件操作。
调用CloseHandle()关闭文件句柄。
该流程如图6-4所示。
图6-4 使用Windows API操作文件的流程 |
表6-6 文件管理API | |
函数 | 含义 |
CopyFile | 复制指定名称的源文件至新命名的文件 |
DeleteFile | 删除文件 |
MoveFile | 移动文件 |
ReplaceFile | 替换文件,并制定是否备份 |
GetFileAttributes | 获取文件的属性 |
GetFileSize | 获取文件的大小 |
GetFileType | 获取文件的类型 |
GetFullPathName | 获取文件的完整路径名 |
SearchPath | 在指定路径下搜索满足条件的文件 |
FindFirstFile | 查找符合指定名称的第一个文件 |
FindNextFile | 查找符合指定名称的下一个文件,与FindFirstFile配合使用 |
HANDLE WINAPI FindFirstFile( __in LPCTSTR lpFileName, __out LPWIN32_FIND_DATA lpFindFileData ); BOOL WINAPI FindNextFile( __in HANDLE hFindFile, __out LPWIN32_FIND_DATA lpFindFileData );
现在动手
编写如下程序,体验如何使用Windows API来查找C驱动器根目录下的所有目录和文件。
【程序 6-1】使用Windows API查找文件
01 #include "stdafx.h" 02 #include "windows.h" 03 #include "atltime.h" 04 #include <locale.h> 05 06 int main() 07 { 08 setlocale(LC_ALL, "chs"); 09 WIN32_FIND_DATA FindFileData; 10 11 TCHAR FileName[] = _T("c://*.*"); 12 //开始查找 13 HANDLE hFind = FindFirstFile(FileName, &FindFileData); 14 if(hFind != INVALID_HANDLE_VALUE) 15 { 16 while(true) 17 { 18 CTime CreationTime(FindFileData.ftCreationTime); 19 20 //是目录 21 if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) 22 _tprintf(_T("<%s>/t"), FindFileData.cFileName); 23 else 24 _tprintf(_T("%s/t"), FindFileData.cFileName); 25 26 //创建时间 27 _tprintf(_T("/t/t%s/r/n"), CreationTime.Format(_T("%Y年%m月%d日%H时"))); 28 29 if(!FindNextFile(hFind, &FindFileData)) 30 break; 31 } 32 FindClose(hFind); 33 } 34 35 return 0;01 }
运行结果如图6-5所示,它列出了"C:/"根目录下的所有文件及目录。
图6-5 运行结果 |
该项目对应于光盘中的目录"/ch06/FileApiTest"。
6.1.4 使用MFC::CFile
使用HANDLE操作文件显得有点陈腐,CFile封装了Windows系统对文件的操作。可以使用如下语句构造CFile对象:
CFile( ); CFile( HANDLE hFile //文件句柄 ); CFile( LPCTSTR lpszFileName, //文件名 UINT nOpenFlags //文件打开方式 );
其中,参数nOpenFlags可能的取值如表6-7所示。
表6-7 CFile文件打开方式 | |
标志 | 含义 |
CFile::modeCreate | 创建新文件,如果文件已存在, 则将其长度变成0 |
CFile::modeNoTruncate | 与modeCreate组合使用,如果文 件已存在,则不会将其长度变成0 |
CFile::modeRead | 以只读方式打开文件 |
CFile::modeReadWrite | 以读写方式打开文件 |
标志 | 含义 |
CFile::modeWrite | 以只写方式打开文件 |
CFile::modeNoInherit | 组织该文件被子项继承 |
CFile::shareDenyNone | 以共享模式打开文件,不会禁止其他进程对文件的读写 |
CFile::shareDenyRead | 禁止其他进程对文件的读操作 |
CFile::shareDenyWrite | 禁止其他进程对文件的写操作 |
CFile::shareExclusive | 以独占模式打开文件,禁止其他进程对文件的读写 |
CFile::typeText | 以文本方式打开文件 |
CFile::typeBinary | 以二进制方式打开文件 |
表6-8 CFile操作函数 | |
函数 | 含义 |
Open | 打开文件 |
Close | 关闭文件 |
Flush | 刷新待写的数据 |
Read | 从当前位置读取数据 |
Write | 向当前位置写入数据 |
GetLength | 获取文件的大小 |
Seek | 定位文件指针至指定位置 |
SeekToBegin | 定位文件指针至文件头 |
SeekToEnd | 定位文件指针至文件尾 |
GetFileName | 获取文件名,如:“NOTEPAD.EXE” |
GetFilePath | 获取文件路径,如:“C:/WINDOWS /NOTEPAD.EXE” |
GetFileTitle | 获取文件标题,如:“NOTEPAD” |
GetPosition | 获取当前文件指针 |
GetStatus | 获取当前文件的状态,返回一个CFileStatus |
#Remove | 静态方法,删除指定文件 |
#Rename | 静态方法,重命名指定文件 |
使用CFile操作文件的流程如下:
构造一个CFile对象。
调用CFile::Open()函数创建、打开指定的文件。
调用CFile::Read()和CFile::Write ()进行文件操作。
调用CFile::Close()关闭文件句柄。
====未完待续====
以上摘自《把脉VC++》第6.1小节的内容 ,转载请注明出处。
如果你想与我交流,请点击如下链接加我为好友:http://student.csdn.net/invite.php?u=113292&c=8913f87cffe7d533
相关文章推荐
- VC中文件操作的几种方式(1,2)
- VC中文件操作的几种方式(1,2)
- VC中文件操作的几种方式(1,2)
- VC中文件操作的几种方式(3,4)
- VC中文件操作的几种方式(1,2)
- VC中文件操作的几种方式(3,4)
- VC中文件操作的几种方式(3,4)
- VC中文件操作的几种方式(1,2)
- VC中文件操作的几种方式(1,2)
- VC中文件操作的几种方式(3,4)
- VC中文件操作的几种方式(1,2)
- VC中文件操作的几种方式(1,2) 推荐
- VC 操作Excel的几种方式
- vc中读取wav文件的时长和文件播放的几种方式
- pyhton读取文件几种操作方式
- Windows系统中监控文件复制操作的几种方式
- [转]Windows系统中监控文件复制操作的几种方式
- vc中读取wav文件的时长和文件播放的几种方式
- Windows系统中监控文件复制操作的几种方式
- Java 文件操作的几种方式