/*头文件*/
#include<stdio.h>
#include<windows.h>
/******************************************
//DWORD ReadFileContent ( LPSTR szFilePath)
//功能:获取文件大小 读取文件内容
// 并以十六进制的形式打印出来
//参数:LPSTR szFilePath 文件路径
*******************************************/
DWORD ReadFileContent (LPSTR szFilePath)
{
HANDLE hFileRead; //文件大小
//LARGE_INTEGER liFileSize; //保存文件大小 //修改
DWORD dwFileSize; //改
DWORD dwReadedSize; //成功读文件数据大小
LONGLONG liTotalRead = 0; //累加计算以读取文件的大小
BYTE lpFileDataBuffer[32]; //文件数据缓存
//打开已存在的文件读取内容
hFileRead = CreateFile(szFilePath, //要打开的文件名
GENERIC_READ, //已读的方式打开
FILE_SHARE_READ, //可共享读
NULL, //默认安全设置
OPEN_EXISTING, //只打开已存在的文件
FILE_ATTRIBUTE_NORMAL, //常规文件属性
NULL); //无模板
//打开文件是否成功
if(hFileRead == INVALID_HANDLE_VALUE)
{
printf("打开文件失败:%d\n",GetLastError());
}
//if(!GetFileSize (hFileRead,&liFileSize)) //获取文件的大小,返回BOOL值(改)
if(!(dwFileSize = GetFileSize (hFileRead,NULL)) )
{
printf("获取文件大小失败:%d",GetLastError());
}
else
{
//printf("文件大小为:%d\n",liFileSize.QuadPart);
printf("文件大小为:%d\n",dwFileSize); //
}
//循环读取并打印文件内容
while(TRUE)
{
DWORD i;
//使用API函数ReadFile()读取文件内容
if(!ReadFile(hFileRead, //读取文件句柄
lpFileDataBuffer, //存储文件的文件内容
32, //读的大小(字节)
&dwReadedSize, //实际读取的大小
NULL)) //不适用Overlapped
{
printf("读取文件错误:%d\n",GetLastError());
break;
}
printf("读取了%d字节,内容是:",dwReadedSize);
for(i=0; i<dwReadedSize; i++)
{
printf("0x%x ",lpFileDataBuffer[i]); //以十六进制形式输出
}
printf("\n");
liTotalRead += dwReadedSize;
if( liTotalRead == dwFileSize ) //标记 此处存在问题
{
printf("读取文件结束\n");
break;
}
}
CloseHandle(hFileRead); //关闭文件句柄
return 0;
}
/*************************************************
//DWORD SavaDataToFile(LPSTR szFilePath,
// LPVOID lpData,
// DWORD dwDataSize)
//功能:将数据存储到文件末尾
//参数:LPSTR szFilePath 文件的路径
// LPVOID lpData 需存储的数据
// DWORD dwDatsSize 数据大小(字节)
**************************************************/
DWORD SavaDataToFile(LPSTR szFilePath,
LPVOID lpData,
DWORD dwDataSize)
{
HANDLE hFileWrite; //文件数据
DWORD dwWritedDataSize; //成功写入的数据的大小
hFileWrite = CreateFile(szFilePath, //要打开文件
GENERIC_WRITE, //一些方式打开
0, //可供享读
NULL, //默认安全设置
OPEN_ALWAYS, //打开已存在的文件,没有则创建
FILE_ATTRIBUTE_NORMAL, //常规文件属性
NULL); //无模板
//判断是否打开成功
if(hFileWrite == INVALID_HANDLE_VALUE)
{
printf("文件打开失败:%d\n",GetLastError());
}
//设置指针到文件尾(设置到文件尾的话就会从头开始算起字节数,所以要覆盖掉原来的数据。改成FILE_BEGIN)
//SetFilePointer(hFileWrite, 0, 0, FILE_END);
SetFilePointer(hFileWrite, 0, 0, FILE_BEGIN);
//将数据写入文件
if(!WriteFile(hFileWrite, lpData, dwDataSize, &dwWritedDataSize,NULL))
printf("写文件失败:%d\n",GetLastError());
else
printf("写入数据成功,写入 %d 字节。\n",dwWritedDataSize);
CloseHandle(hFileWrite);
return 0;
}
/*************************************************
//int main(void)
//功能:演示使用SaveDataToFile和ReadFileContent函数
**************************************************/
int main(void)
{
//FILE *fp;
LPSTR szFileData = "fsjaky的博客:http://blog.csdn.net/fsjaky";
HANDLE hTest;
DWORD dwWritedDataSize;
SavaDataToFile("test.txt",szFileData,lstrlen(szFileData));
ReadFileContent("test.txt");
/*DeleteFile( "test.txt" ); //每次运行完后删除文件,以免下次运行出错
//使用DeleteFile()的原因,在ReadFileContent()函数中的判断语句
//if( liTotalRead == liFileSize.QuadPart )如果不删除内容,则出现死循环,
//liFileSize.QuadPart的值不断在变化,将不会和liTotalRead相等
hTest = CreateFile("test.txt", //要打开的文件名
GENERIC_WRITE, //已写的方式打开
FILE_SHARE_READ, //可共享读
NULL, //默认安全设置
CREATE_ALWAYS, //总是创建
FILE_ATTRIBUTE_NORMAL, //常规文件属性
NULL); //无模板
if(WriteFile(hTest, szFileData, lstrlen(szFileData), &dwWritedDataSize,NULL))
printf("写入成功\n");
else
{
printf("写入失败%d\n",GetLastError());
}*/
CloseHandle( hTest );
//fclose(fp);
return 0;
}