VC中文件操作的几种方式(3,4)
来源:互联网 发布:知乎 欧猪四国是哪四国 编辑:程序博客网 时间:2024/06/07 05:45
6.1.3 使用Windows API
Windows API总是显得格外沉重,表6-5是常用的文件读写操作API。
表6-5 文件读写API
函数
含义
CreateFile
创建、打开文件,返回文件句柄
CloseHandle
关闭文件句柄
ReadFile
从文件读取数据
WriteFile
向文件写入数据
SetFilePointer
设置文件读写指针
LockFile
锁定文件
UnlockFile
解锁文件
在Windows中,文件操作总是针对一个文件句柄进行的,如:
- 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操作文件的流程除了文件操作函数,Windows还提供了用于文件管理的API,包括对文件进行复制、删除等操作,如表6-6所示。
表6-6 文件管理API
函数
含义
CopyFile
复制指定名称的源文件至新命名的文件
DeleteFile
删除文件
MoveFile
移动文件
ReplaceFile
替换文件,并制定是否备份
GetFileAttributes
获取文件的属性
GetFileSize
获取文件的大小
GetFileType
获取文件的类型
GetFullPathName
获取文件的完整路径名
SearchPath
在指定路径下搜索满足条件的文件
FindFirstFile
查找符合指定名称的第一个文件
FindNextFile
查找符合指定名称的下一个文件,与FindFirstFile配合使用
FindFirstFile()和FindNextFile()函数常常被用来配合使用,用以查找文件。它们的原型如下:
- 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
以二进制方式打开文件
此外,CFile提供了一些常用的操作函数,如表6-8所示。
表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
静态方法,重命名指定文件
注意最后两个静态函数,其实它们封装了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
此文章来自于【http://blog.csdn.net/bluejoe2000/article/details/6474065】
- VC中文件操作的几种方式(3,4)
- VC中文件操作的几种方式(3,4)
- VC中文件操作的几种方式(3,4)
- VC中文件操作的几种方式(1,2)
- VC中文件操作的几种方式(1,2)
- VC中文件操作的几种方式(1,2)
- VC中文件操作的几种方式(1,2)
- VC中文件操作的几种方式(1,2)
- VC中文件的操作
- VC 操作Excel的几种方式
- Qt中文件读取的几种方式
- windows编程中文件操作的几种方法
- windows编程中文件操作的几种方法
- windows编程中文件操作的几种方法
- vc中文件的读写操作
- VB中文件操作的两种方式
- VB中文件操作的两种方式
- VB中文件操作的两种方式
- 多维数组指针问题
- 【POJ 1330】 Nearest Common Ancestors(LCA)
- 代理设计模式
- Python shutil模块
- HDU---4513-吉哥系列故事――完美队形II (manacher)
- VC中文件操作的几种方式(3,4)
- C# winform中读写ini文件
- 浅谈Java字符串
- 第十周项目二 二叉树遍历的递归算法
- Linux parted 分区及挂载
- nginx mac下编译调试
- 作业练习(11月5日)
- iOS - UIView
- 判定最小生成树是否唯一