• 6.1.5 文本文件与二进制文件


    6.1.5  文本文件与二进制文件

    文本文件与二进制文件实际上没有太大的区别,一般来讲,文本文件仅用来存储可打印字符(如:字母、数字、空格等),文本文件也可以以二进制方式打开,如图6-6所示的是在UltraEdit-32中以二进制的方式查看文本文件的情形。

     
    (点击查看大图)图6-6  文本文件的二进制查看方式
    文本与二进制的另外一种区别体现在人们的习惯:在文本模式中,当我们谈及"65"时,它一般指代字符串"65",如图6-7所示,"65"是2个字符,它们在二进制中显示成十六进制的"0x3635"。
     
    (点击查看大图)图6-7  文本文件中的"65"
    但是在二进制模式下,当我们谈及"65"时,那一般都指代数值65,如图6-8所示的数值65的二进制内容(在十六进制中,65表示成0x41),一旦我们切换到文本查看模式,它则对应于ASCII码中的"A"字符。
     
    (点击查看大图)图6-8  二进制文件中的数值65

    可以看出,文本格式和二进制格式还是有差别的。如果以文本方式写入"65",而以二进制文件读取的话,则会认为它的值为0x3635,这样,就会给软件程序带来致命的差错。

    在Windows API世界里,根本就没有所谓的文本文件的读写函数,所有的缓冲内容的访问都是通过char *指针完成的,至于其内容是文本还是二进制,则是应用程序的责任了。

    现在动手

    编写如下程序,体验文本与二进制内容的存取操作。

    【程序 6-2】文本与二进制内容的存储
     

    1. 01  #include "stdafx.h" 
    2. 02  
    3. 03  int main()  
    4. 04  {  
    5. 05      char s1[4] = "65";  
    6. 06      int n1 = 65;  
    7. 07  
    8. 08      //写  
    9. 09      CFile file;  
    10. 10      file.Open(_T("test.out"), 
      CFile::modeWrite | CFile::modeCreate);  
    11. 11  
    12. 12      //写入文本"65"  
    13. 13      file.Write(s1, sizeof(s1));  
    14. 14      //写入数值65  
    15. 15      file.Write(&n1, sizeof(n1));  
    16. 16  
    17. 17      file.Close();  
    18. 18  
    19. 19      //读  
    20. 20      file.Open(_T("test.out"), CFile::modeRead);  
    21. 21      char s2[4];  
    22. 22      int n2;  
    23. 23  
    24. 24      //先读文本,再读数值  
    25. 25      file.Read(s2, sizeof(s2));  
    26. 26      file.Read(&n2, sizeof(n2));  
    27. 27  
    28. 28      printf("s2=%s/r/n", s2);  
    29. 29      printf("n2=%d/r/n", n2);  
    30. 30  
    31. 31      //先读数值,再读文本  
    32. 32      file.SeekToBegin();  
    33. 33      file.Read(&n2, sizeof(n2));  
    34. 34      file.Read(s2, sizeof(s2));  
    35. 35  
    36. 36      printf("s2=%s/r/n", s2);  
    37. 37      printf("n2=%d/r/n", n2);  
    38. 38  
    39. 39      file.Close();  
    40. 40      return 0;02 } 

    运行结果如图6-9所示。

     
    (点击查看大图)图6-9  运行结果

    这个例子告诉我们:在读文件时,其顺序应该和写文件的顺序一致,否则会带来不可预测的错误。

    光盘导读

    该项目对应于光盘中的目录"/ch06/CFileTest"。
     

    ====未完待续====

    以上摘自《把脉VC++》第6.1小节的内容 ,转载请注明出处。

    如果你想与我交流,请点击如下链接加我为好友:http://student.csdn.net/invite.php?u=113292&c=8913f87cffe7d533

  • 相关阅读:
    hdu 1978 How many ways
    hdu 2209 翻纸牌游戏
    hdu 2149 Public Sale (博弈规律题)
    CF 353C Find Maximum #205 (Div. 2)
    barrier and Fence
    window coordinate
    GPU hang
    the application was unable to start correctly 0xc000007b
    vertex buffer 数据结构 如何读vb的memory pool
    map
  • 原文地址:https://www.cnblogs.com/bluejoe/p/5116052.html
Copyright © 2020-2023  润新知