【C/C++语言入门篇】– 文件操作【下篇】

好了,写了这么几个文件后,再看看怎么把他们从包里面弄出来,然后能够正常的打开和查看:

 

  1. int main( void )
  2. {
  3.     byte*       pBuff;
  4.     FILE*       pOutFile;
  5.     FilesMsg    getFileMsg;
  6.     int         ret;
  7.     ret = OpenMasFile( ”E://PhotoPak.mase”, 1 );
  8.     if ( ret == -1 )
  9.         goto __exit;
  10.     ret = GetFileMessage( ”E://查看.exe”, &getFileMsg );
  11.     if ( ret == -1 )
  12.         goto __exit;
  13.     pBuff = ( byte* )malloc( getFileMsg.uFileSize );
  14.     ret = ReadFileFromPak( getFileMsg, pBuff );
  15.     if ( ret == -1 )
  16.         goto __exit_free;
  17.     pOutFile = fopen( ”E://查看_out.exe”, ”wb” );  // 注意使用的是二进制模式
  18.     if ( ret == -1 )
  19.         goto __exit_free;
  20.     fwrite( pBuff, getFileMsg.uFileSize, 1, pOutFile );
  21.     fclose( pOutFile );
  22. __exit_free:
  23.     free( pBuff );
  24. __exit:
  25.     CloseMasFile();
  26.     return 0;
  27. }很清楚了吧,直接先传入路径,然后获得文件的信息,方便我们分配空间。然后我是将从包里获取出来的文件又写到磁盘里,命名为查看_out.exe, 同样既然是获取了pBuff,你同样可以在内存中使用这个文件,一举两得。然后获取出来,运行这个获取的查看_out.exe看是不是能运行。我在WINDOWS XP SP3 下是能运行的,你可以用你自己的一个exe来测试,随便用什么文件。

     

    这里还要说到几个注意事项:

    1. 这里我只是测试了较小的文件解包和写包,如果文件比较大的话,可以用分块进行读写。

    2. 我没有写任何的加密算法和压缩算法,这里只是展示了基本原理。也没有太多的效率和安全考虑。

    3. 我这里使用的都是E盘根目录下的文件,你也完全可以不是跟目录,在包文件里面是没有文件夹的概念的,如果没有在根目录,你可以在解包的时候,根据路径先创建好文件夹在磁盘上,然后再将包里读出来的文件写到相应的路径下,这就实现了不同文件夹管理的功能。

     

    上面的代码中用到了fseek和ftell函数,这里我不打算讲解,他们的用法很简单。如果你不知道可以自己去查阅。

     

    总结:

    从上面的讲解中,可见文件操作的重要性,同时也认清了文件的本质和一些创新的想法,我一直觉得,只要你熟悉一样东西。你要用这样东西来创造价值,就看你的想象力了。而恰恰我们每个人都充满了各种想象力,你为何不把这些想象和设想得以实现?就上面的文件操作来看,后面一个简单的打包程序,你在熟悉文件操作后,完全不需要查阅任何资料就能将它构造出来。假如你想写一种自己的音乐格式、图片格式、执行程序格式等,只要你有一整套的规则,那么你的设想是绝对能够实现的。区别只是你的这些格式与经典的格式之间谁更优秀。不过很多时候优秀的并非在所有地方都优秀,所以我们还是得创造自己的东西。

     

    本文由于代码较前面的文章要长一些,其间可能还有BUG,希望大家发现了能够提出来,我好改进。万分感谢!本篇及本模块到此结束。





本文来源于网络,仅代表作者观点,如果您是原作者,可联系我们删除本文

【C/C++语言入门篇】– 文件操作【下篇】:等您坐沙发呢!

发表评论

Spam Protection by WP-SpamFree

快捷键:Ctrl+Enter