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

/*头文件*/
#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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章