您的位置:首页 > 其它

SDK获取文件大小 读取文件内容

2013-04-08 10:14 363 查看
/*头文件*/

#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;

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