您的位置:首页 > 其它

孙鑫 第十二课之二 CFile类/CreateFile 文件操作

2012-12-05 17:18 253 查看
1 CFile类
①构造函数
CFile (
LPCTSTR lpszFileName, //文件名(可以包含路径)
UINT nOpenFlags //打开标志
);
eg.
CFile file("6.txt", CFile::modeCreate | CFile::modeWrite); //创建写文件,如果文件存在长度清零。

②CFile::Write

virtual void Write(constvoid* lpBuf, //要写的缓冲区指针
UINT nCount //要写入的字节数, NOTE:nCount单位为字节数,而不是字符个数!
);
throw(CFileException);

eg.

CFile file("7.txt", CFile::modeCreate | CFile::modeWrite);
int arr[] = {49, 50 , 51, 52}; //写数字1 2 3 4 要写ASCII码

file.Write(arr, sizeof(arr)); //sizeof(arr)为要写的字节数
file.Close();

③CFile::GetLength

virtual DWORD GetLength() const;
throw(CFileException);

功能:取得文件长度,单位字节数,而非字符个数。
eg.
int len = file.GetLength(); //返回file对象所关联的文件字节数

④CFile::Read
virtual UINTRead(
void* lpBuf, //把读入的内容写到lpBuf所指的内存区域
UINT nCount//读入nCount字节内容到lpBuf所指内存区域
);
throw(CFileException);
eg.
char ch[100];
memset(ch, '\0', 100);
//memset(ch, '\0', sizeof(ch)); 同上句, memset()是对字节操作,因此如果对字符以外的内存区域赋值,要注意区别!
file.Read(ch, file.GetLength());

⑤Example of Writing file

CFile file("7.txt", CFile::modeCreate | CFile::modeWrite);
int arr[] = {49, 50 , 51, 52};
file.Write(arr, sizeof(arr));
file.Close();

⑥Example of Reading file
CFile file("7.txt", CFile::modeRead);
int *arr = NULL;
int len = 0;
len = file.GetLength(); //返回file字节数
int arrLength = 0;
arrLength = len / sizeof(int); //数组元素个数
arr = new int[arrLength];
file.Read(arr, len);

2 WIN32 API 文件读写
①CreateFile
HANDLE CreateFile(
LPCTSTR lpFileName, //指向文件名的指针
DWORD dwDesiredAccess, //访问模式(写/读)
DWORD dwShareMode, //共享模式
LPSECURITY_ATTRIBUTES lpSecurityAttributes, //指向安全属性的指针
DWORD dwCreationDisposition, //如何创建
DWORD dwFlagsAndAttributes, //文件属性
HANDLE hTemplateFile //用于复制文件句柄
);
【dwDesiredAccess】
Long,如果为 GENERIC_READ 表示允许对设备进行读访问;如果为 GENERIC_WRITE 表示允许对设备进行写访问(可组合使用);如果为零,表示只允许获取与一个设备有关的信息
【dwShareMode】
如果为0表示不共享,并且该函数成功执行,在该函数返回的句柄被close之前文件对象不能再被打开或共享;如果为FILE_SHARE_DELETE表示在删除访问的时候可以共享;如果为FILE_SHARE_READ / FILE_SHARE_WRITE表示可以读/写共享。
【lpSecurityAttributes】
指向一个SECURITY_ATTRIBUTES结构的指针,定义了文件的安全特性(如果操作系统支持的话)
【dwCreationDisposition】
CREATE_NEW创建文件;如文件存在则会出错CREATE_ALWAYS创建文件,会改写前一个文件OPEN_EXISTING文件必须已经存在。由设备提出要求OPEN_ALWAYS如文件不存在则创建它TRUNCATE_EXISTING讲现有文件缩短为零长度
【dwFlagsAndAttributes】
FILE_ATTRIBUTE_ARCHIVE标记归档属性FILE_ATTRIBUTE_COMPRESSED将文件标记为已压缩,或者标记为文件在目录中的默认压缩方式FILE_ATTRIBUTE_NORMAL默认属性FILE_ATTRIBUTE_HIDDEN隐藏文件或目录FILE_ATTRIBUTE_READONLY文件为只读FILE_ATTRIBUTE_SYSTEM文件为系统文件FILE_FLAG_WRITE_THROUGH操作系统不得推迟对文件的写操作FILE_FLAG_OVERLAPPED允许对文件进行重叠操作FILE_FLAG_NO_BUFFERING禁止对文件进行缓冲处理。文件只能写入磁盘卷的扇区块FILE_FLAG_RANDOM_ACCESS针对随机访问对文件缓冲进行优化FILE_FLAG_SEQUENTIAL_SCAN针对连续访问对文件缓冲进行优化FILE_FLAG_DELETE_ON_CLOSE关闭了上一次打开的句柄后,将文件删除。特别适合临时文件

【hTemplateFile】
如果不为零,则指定一个文件句柄。新文件将从这个文件中复制扩展属性,一般为NULL。

②WriteFile
BOOL WriteFile(
HANDLE hFile, // 文件句柄LPCVOID lpBuffer, // 数据缓存区指针DWORD nNumberOfBytesToWrite, // 你要写的字节数LPDWORD lpNumberOfBytesWritten, // 用于保存实际写入字节数的存储区域的指针LPOVERLAPPED lpOverlapped // OVERLAPPED结构体指针);

③CloseHandle
BOOL CloseHandle(
HANDLE hObject // handle to object
);
功能:关闭一个已经打开了个对象

④ReadFile
ReadFile(
HANDLE hFile, //文件的句柄
LPVOID lpBuffer, //用于保存读入数据的一个缓冲区DWORD nNumberOfBytesToRead, //要读入的字节符数LPDWORD lpNumberOfBytesRead, //指向实际读取字节数的指针
LPOVERLAPPED lpOverlapped //如文件打开时指定了FILE_FLAG_OVERLAPPED,那么必须,用这个参数引用一个特殊的结构。该结构定义了一次异步读取操作。否则,应将这个参数设为NULL
);

⑤Example of Writing file

void CMy59View::OnFileWrite()
{

HANDLE hFile;
hFile = CreateFile("8.txt", FILE_GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
DWORD length = 0;

int arr[] = {49, 50 , 51, 52};
if ( hFile != INVALID_HANDLE_VALUE)
{
WriteFile(hFile, arr, sizeof(arr), &length, NULL);
}
else
{
MessageBox(_T("文件打开错误"));
}
CloseHandle(hFile);
}

⑥Example of Reading file

void CMy59View::OnFileRead()
{

HANDLE hFile;
hFile = CreateFile("9.txt", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if( hFile != INVALID_HANDLE_VALUE)
{
int num[5];
DWORD length = 0;
ReadFile(hFile, num, sizeof(num), &length, NULL);
}
else
{
MessageBox(_T("文件打开错误!"));
}
CloseHandle(hFile);
}

NOTE:串口为独占设备,当用CreateFile打开串口时共享参数一定为0(即不共享),dwCreationDisposition必须为OPEN_EXISTING。


?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: