在将struct对象写入文件时,文件扩展是否重要?

时间:2013-12-11 09:55:41

标签: c file

下面的代码在dat文件中给出了有趣的输出,如下所示。我期望0,输出0.0。

                                        ÌÌÌÌ                                                    ÌÌÌÌ                                                    ÌÌÌÌ                                                    ÌÌÌÌ                                                    ÌÌÌÌ                                                    ÌÌÌÌ                                                    ÌÌÌÌ                                                    ÌÌÌÌ                                                    ÌÌÌÌ                                                    ÌÌÌÌ                                                    ÌÌÌÌ                                                    ÌÌÌÌ                                                    ÌÌÌÌ                                                    ÌÌÌÌ                                                    ÌÌÌÌ                                                    ÌÌÌÌ                                                    ÌÌÌÌ                                                    ÌÌÌÌ                                                    ÌÌÌÌ                                                    ÌÌÌÌ                                                    ÌÌÌÌ                                                    ÌÌÌÌ                                                    ÌÌÌÌ                                                    ÌÌÌÌ                                                    ÌÌÌÌ                                                    ÌÌÌÌ                                                    ÌÌÌÌ                                                    ÌÌÌÌ                                                    ÌÌÌÌ                                                    ÌÌÌÌ                                                    ÌÌÌÌ                                                    ÌÌÌÌ                                                    ÌÌÌÌ                                                    ÌÌÌÌ                                                    ÌÌÌÌ                                                    ÌÌÌÌ                                                    ÌÌÌÌ                  

当我创建一个txt文件而不是一个dat文件时,输出变为

NULL NULL NULL NULL ...

如果我对文件提供不同的扩展名,为什么重要?另外为什么我不能得到常规的0而不是我和NULL?

#include <stdio.h>

struct clientData{

int accountNo;
char firstName[20];
char lastName[20];
double balance;

};

int main(void){

int i;
FILE *ptrCrdFile;
struct clientData bankClient={0,"","",0.0};

ptrCrdFile=fopen("credits.dat","wb");

for (i = 0; i < 100; i++)
{
    fwrite(&bankClient, sizeof(struct clientData), 1, ptrCrdFile);
}

fclose(ptrCrdFile);

return 0;

}

4 个答案:

答案 0 :(得分:3)

文件的扩展名只是名称的一部分,方便了用户。根据操作系统,它可能用于识别用于打开它的应用程序,但这是不可靠的。因此,在许多情况下,程序具有检测实际格式的代码,因此它们不需要单独依赖扩展。即,无论扩展名是否改变,许多电影播放器​​都可以打开正确播放的所有类型的电影文件。例如,如果您将电影从mpg4重命名为avi ..

答案 1 :(得分:2)

文件扩展名用于帮助操作系统识别其中的数据格式,但不会修改其表示形式。使用十六进制编辑器查看文件以查找数据,因为您正在“按原样”编写。

                     "b" option for file output format : 
  

使用上面的模式说明符,文件将作为文本文件打开。为了将文件作为二进制文件打开,模式字符串中必须包含“b”字符。这个附加的“b”字符可以附加在字符串的末尾(从而产生以下复合模式:“rb”,“wb”,“ab”,“r + b”,“w + b”,“a + b“)或插入字母和混合模式的”+“符号之间(”rb +“,”wb +“,”ab +“)。

例如,struct clientData bankClient={5,"a","b",0.1};为您提供以下数据:

(x86平台;小端)

enter image description here

                           data representation : 
  • 5 - &gt;小端的0x05 0x00 0x00 0x00
  • char[20]="a" - &gt; 0x61 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
  • char[20]="b" - &gt; 0x62 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
  • 0.1(64位) - &gt; 0000 0000 9a99 9999 9999 b93f(查看[双浮点表示])

答案 2 :(得分:1)

取决于操作系统和应用程序。通常,扩展名是用于快速识别文件类型的文件名的一部分。某些应用程序使用扩展名作为标记来快速确定文件类型。

答案 3 :(得分:1)

如果要使用文本编辑器打开保存的文件(.txt或.dat,扩展名无关紧要),则需要使用文本输出函数(如fprintf)写入文件。

例如:

 ...
 for (i = 0; i < 100; i++)
 {
   fprintf(ptrCrdFile, "%d\t%s\t%s\t%lf\n", bankClient.accountNo,  
           bankClient.firstName, bankClient.lastName, bankClient.balance);
 }
 ...