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;
}
#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;
}
相关文章推荐
- 使用java读取txt里边的文件内容并获取大小(M).txt
- 获取文件大小并读取文件内容(应用在protobuf文件解析上)
- C语言获取文件字节大小及读取内容到内存简单例子
- [导入]Asp.Net 文件操作基类(读取,删除,批量拷贝,删除,写入,获取文件夹大小,文件属性,遍历目录)(一)
- python 读取文件,获取文件最后一行内容
- [导入]Asp.Net 文件操作基类(读取,删除,批量拷贝,删除,写入,获取文件夹大小,文件属性,遍历目录)(二)
- Asp.Net 文件操作基类(读取,删除,批量拷贝,删除,写入,获取文件夹大小,文件属性,遍历目录)
- Asp.Net 文件操作基类(读取,删除,批量拷贝,删除,写入,获取文件夹大小,文件属性,遍历目录)
- 获取XML文件中内容大小
- php获取远程文件内容与大小的函数代码
- MFC查找所有后缀文件获取文件大小读取特定位置数据
- Asp.Net 文件操作基类(读取,删除,批量拷贝,删除,写入,获取文件夹大小,文件属性,遍历目录)
- linux下C++读取文件,获取文件大小。
- js读取xml文件并获取文件内容
- android 读取txt文件获取每行内容
- 1.实验 5.2.5 文件定位 用lseek()函数实现以下功能 1. 获取文件大小 2. 为文件添加指定长度的空洞 3. 在指定位置写入指定内容 4. 读出指定位置的内容 1. 获取文件大小
- 获取文件内容的大小
- [转]Asp.Net 文件操作基类(读取,删除,批量拷贝,删除,写入,获取文件夹大小,文件属性,遍历目录)
- 读取文件大小 获取文件长度
- java读取文件大小和内容