文本文件和二进制文件 – 贺大卫

1、二进制文件是把内存切中要害录音按其在内存切中要害贮藏同次多项式买方收到的卖方寄来的样本出口到磁盘上沉淀物,换句话说,贮藏录音的原始同次多项式。。

2、主题文件将航空站同次多项式的二进制录音出口到磁盘。,换句话说,贮藏录音的航空站同次多项式。。

敝施惠于把需求贮藏的录音堕入两类。。当你有录音要贮藏的时辰.率先要思索的成绩并归咎于你要选择用二进制文件静静地主题文件来举行贮藏,另一方面率先得思索你要贮藏的录音是字母录音静静地非字母录音.在此依据再议论适宜选择用什么文件举行贮藏为好。

一、倘若要贮藏字母录音,无论是放在主题文件静静地放在二进制文件金中都和内存切中要害录音同次多项式是不注意分清的.同一也和航空站同次多项式不注意分清。贮藏和显示效能经过不注意反差。,不破坏贮藏空隙,不破坏掉换工夫。像大约,倘若文件只贮藏字母录音,这样议论该文件是用主题文件不然二进制文件是不注意任何任何人意义的。

二、倘若要贮藏非字母录音,状况有点儿复杂稍微。。

1、倘若您需求频繁地饲料和拜访录音.这样适宜采取二进制文件举行沉淀物,这节省了贮藏空隙和掉换工夫。。

2、倘若需求频繁地向航空站显示录音或读取录音,那时的,适宜应用任何人主题文件来贮藏。,这节省了掉换工夫。。

三、倘若要贮藏的录音中现存的字母录音又有非字母录音这样要怎么办呢?那会多个的前述的两点举行均衡以找到粹平衡点了

总结:字母录音自己被编码在内存中。,像大约,二进制和主题同次多项式都是同卵双胞的。,非字母录音,诸如,iTi=10;倘若应用二进制贮藏它,1010,不过倘若需求用主题同次多项式来举行贮藏的话就一定举行设计一个版式编码(对1和0分清编码,换句话说,排队对应于1和0对应的加密值R。

这时谈谈主题文件与二进制文件随着C允许宣誓后释放读写这两种文件的规范乐器的吹口。

自然规律的饲料是二进制的。,键入是要在饲料录音优于有所不相同。。】
主题文件与二进制文件在计算器文件零碎切中要害自然规律的贮藏都是二进制的,换句话说,自然规律的贮藏和01码经过不注意分清。,对此不注意抗议。,它们的辨别首要表如今逻辑贮藏上。,换句话说,编码。
主题文件体式贮藏为字母,那时的贮藏在其字母中。,主题文件应用字母作为任何人单元来表现和贮藏录音。,诸如,四处走动的1的值,主题文件会将其看成字母‘1’那时的饲料其ASCII编码值(这时让是ASCII编码),这在自然规律的上是0x31的二进制值。,倘若二进制饲料1,整齐的饲料二进制值,诸如,倘若顺序处置整体为1,则二进制值为 0x00000001 (4八位字节)。
自然,倘若顺序首次是作为字母饲料的 即 char ch =”1” 二进制存贮的值是它的ASCII码,因变量的二进制本来是它的ASCII码。。可以总忍受二进制文件执意值自己的编码,这执意加密的无法断定上胶料,因值自己是不相等的八位字节。,如整体4个八位字节这样饲料在二进制文件执意这四价元素八位字节的原始发作二进制值。

综上,可以意识到主题文件与二进制文件执意编码方式相异点一三国际,这执意用户行动,这依赖用户选择什么的加密(字母或值自己)。,即,学习的乐器的吹口选择。,倘若以二进制乐器的吹口方式学习文件这样执意任何人二进制文件,在字母状况下学习文件是任何人主题文件。。如今有任何人编码工夫,将会有意识编码。,正是两个加密对应于假设的节日等用的仪式的坐果。,如用写字板记事本翻开任何人二进制文件会显现乱码的,这时有一小部分的后缀选派,后缀选派无法断定它假设是主题文件。,二进制文件也可以是txt后缀,后缀选派仅用于关系翻开的顺序。,为用户做笔记,它与文件的假设的编码无干。。

可以应用字母乐器的吹口读写二进制文件,你只需求做必然的处置,因而同一事物的二进制文件,主题文件首要表如今宣读和排的方式上。。
同时,在处置T时,Windows经过在显著的的辨别。,将掉换道路 N的自动手枪掉换 \r\n。

顶点主题文件和二进制文件首要是windows下的意见,UNIX/Linux不区别两个文件,他们等式举动财产文件。,将财产文件都看成二进制文件。

规范I/O库中 首要应用 fread/fwrite来读写二进制文件,可以应用主题文件 fread/fwrite fgetc/fputc Fprintf等

      近来我看了一篇性格,勃它提示敝这时根本成绩。,我和它经过的分清归咎于很光滑的。,介绍初期就努力过了。,分享你自己的领会。(十足的光滑的的先生可以清澈的这篇性格)
从贮藏方式,文件贮藏在磁盘上的方式是二进制的。,因而,主题文件说起来也适宜算二进制文件。这样它们经过的分清是什么呢?,它们各自的优点和缺陷是什么?,我渐渐地走。
率先从他们的辨别,还是都是二进制文件,但二元代表的意图不相同。。运用类比,任何人人,敝可以叫他的名字,可以叫他的乳名,但都是这时人的代表。二进制读写是录音在内存切中要害整齐的读写。,主题,率先将录音掉换为字母串。,重写主题。下面是任何人探察来阐明。
敝曾经限制了任何人创作。,表达先生教训,敝计划用二进制和主题的方式把先生的教训写进。

struct Student 
{
int num
字母选派〔20〕
float score;
};

敝限制了两种方式,内存学习和主题学习

应用二进制写
void write_to_binary_file()
{
先生STDU创作
 = 111;
sprintf_s(,”%s”,闪烁
 = 80.0f;
fstream binary_file(“”,ios::out|ios::binary|ios::app); //此处省略文件假设翻开不及格的断定
((char *)&stdu,Sizeof(创作先生);//二进制学习状况
();

主题体式写作
void write_to_text_file()
{
先生STDU创作
 = 111;
sprintf_s(,”%s”,闪烁
 = 80.0f;
文件*fp= fOpen[(]),A ;//这时是文件假设翻开或不及格的断定。
fprintf(fp,”%d%s%f”,,stdu.name,将录音掉换为字母串(字母串的体式可以由亲自限制)
FSET(FP)

主功能要求前两种方式
int _tmain(int argc, _TCHAR* argv[])
{
write_to_binary_file();
write_to_text_file();
return 0;
}

让敝看一下,文件切中要害体式 2十进制记数制文件

主题文件

2十进制记数制文件外面将111编码成6F,1八位字节,这刚要16个妖法表现切中要害111个。,主题文件是用31构图的,31,31应用3八位字节,表现111。73   68   69   6E   65 代表光辉,以后的2十进制记数制文件里是分别的延续的FE,主题文件为38   30…主题文件应用浮点十进制数38(表现8)   30(表现0)  2E(表现.)   30(表现0)   30(表现0)   30(表现0)   30(表现0)   30(表现0)   30(表现0),二进制文件用了4个八位字节表现浮点十进制数00   00   A0   42
经过这时敝可以看见开端。,二进制文件将内存切中要害录音使完整地移走到文件中。,主题体式是将每个录音掉换成字母以学习文件。,它们规模同卵双胞。,版面上有所不相同。。由此可以看出,2十进制记数制文件可以从意识来整齐的用,不过在主题文件中温柔的另任何人口译译员议事程序。,像大约2十进制记数制文件的可移走性好。

一、主题文件与二进制文件的限制

       如所周知,计算器的贮藏在自然规律的学中是二进制的。,因而主题文件与二进制文件的区
这归咎于保健上的。,这是符合逻辑的。。二者都在编码层面上不相同。。

       简略来说,主题文件是本字母的文件。,平民加密有ASCII编码,UNICOD
E编码等。二进制文件是本值编码的文件,你可以本假设的的应用顺序,装设值是什么
意义(大约的议事程序),可以看法是自限制编码。

       从下面可以看出,主题文件根本上是集中:稳定地集中或指向:上胶料的EnCo。,在腰子的依据,每个字母都是直言的结合的。
加密是集中:稳定地集中或指向:的。,ASCII码是8位的编码。,Unicode通常占16位。。而二进制文件可看
它是任何人变量上胶料编码,因它是涵义加密,这样些位代表任何人值,这完整依赖你。。各位都可以
熟识BMP文件,以它为例,头是任何人集中:稳定地集中或指向:上胶料的文件头。
用BMP体式记载文件,接下来的8个八位字节用于记载文件的上胶料。,接下来的4个八位字节用来记得
BMP文件头的上胶料。。。你可以看见。,它的编码是本值的(不定上胶料)。,2、4、
8八位字节具有长的值。,因而BMP是二进制文件。

二、主题文件与二进制文件的存取

       主题器方式翻开文件?,它率先读取文件自然规律的。
对应于它的二进制位流(如已提到的),贮藏是二进制的,那时的原因你的选择
解码流来解说流,那时的让步了解说坐果。。普通而言,您选择的解码方式将是
ASCII码的同次多项式(ASCII码的字母为8位),接下来,它用8位和8位来解说。
此文件流。诸如四处走动的这样任何人文件流”01000000_01000001_01000010_01000011″(下划
线' ' ' ',是我增多了易读,手工生产添加),前8位'0100000 '是用ASCII码处理的
码的话,对应的字母是A字母。,对立的事物3个对立的事物8位可以解码为BCD。,那执意文件
工艺过程可以被解说为ABCD,那时的写字板记事本在银幕上显示ABCD。。

        竟,世上任何任何人事物都适宜与对立的事物事物交流。,有任何人凝结的科学实验报告,既
集中:稳定地集中或指向:编码。人与人经过的允许宣誓后释放交流,中国字妈妈代表了和你一同生动的的人,这是一套
的编码。但注意到这种状况,中国字马能够是你在日本做的人。,
像大约,当A和日本B应用MA这时词举行交流时。,念错是合格的的。用
写字板记事本翻开二进制文件与下面的状况同样的。无论是翻开哪个文档,写字板记事本都是原因ES编制的。
加密任务(如ASCII加密),因而当他翻开二进制文件时,获取加密同样任何人呼唤的成绩。
,解码和解码是违法的。诸如文件流””00000000_00000000_00000000_00000001””能够在二
二进制文件切中要害对应文件是任何人四八位字节整体int。 1,在写字板记事本中,解说生产量null null nu。
这四价元素操纵者。

  主题文件的贮藏和读取根本上是任何人逆议事程序。,不再劣马。而二进制文件的存取显然
同样的于对主题文件的拜访,这刚要一种不相同的编码/解码方式。,不再叙说。

三、主题文件与二进制文件的优缺陷

  因主题文件与二进制文件的分清仅仅是编码上不相同,因而它们的优点和缺陷是编码。
的优缺陷,查找这段加密的书可以光滑的地看见。。普通以为,本字母的主题文件编码
固定长度,译码轻易些;二进制文件编码是加长的,因而它是灵活的的,贮藏有益较高,译码
难必然的(不相同的二进制文件体式,解码有不相同的方式。。论空隙使用,想想看,二
进制文件甚至可以用任何人一会儿来代表任何人意义(位举动),任何任何人主题文件无论如何要紧
这是任何人要人。

  很多地书也被思索。,主题文件的易读更,贮藏一定破费掉换工夫(读写编制加密)
,而二进制文件易读差,不注意掉换工夫(读写不编解码器),整齐的学习值
从软件用户的角度看易读,因敝可以阅读普通写字板记事本器。
有主题文件,因而主题文件是可读的;而读写任何人详细的二进制文件需求任何人详细的
文件译码器,因而说二进制文件易读差,读取BMP文件,诸如,你一定应用宣读软件。
贮藏掉换工夫适宜从节目角度思索。,因必然的举动零碎,如Windows需求归还到行。
记分被掉换(‘n’’’。,生产量'r\n ',像大约,当文件被读取和学习时,举动零碎需求独唱的字母反省。
以后字母是归咎于””\n””或””\r\n””).这时在贮藏掉换在Linux举动零碎中不许的需求,自然,当
当在两个不相同的举动零碎上共享文件时,大约的贮藏掉换能够会涌现,比方Linux零碎和Windows。
S零碎共享主题文件。这种触地得分后得附加分是方式举行的?,我将鄙人一篇性格,Linux主题文件和W
主题文件经过的掉换

四、主题读写与C的二元读写

  适宜说,C的主题读写和二进制宣读和W,详细举动零碎
关心,像大约,在主题中读取和学习的主题一定是主题文件。,用二进制读取和学习的文件一定是两个
这种意见是违法的。下面的声明不装设TYP,它们都要紧窗户。

  主题宣读、排与二元宣读与排的辨别语篇排
时,每个都对抗任何人'\n '(0Ah换行符),它将其生产量'r\n '(0D0AH,归还线路,那时的再写一遍
文件;当主题宣读时,每回对抗'r\n '时,它就会生产量'n '。,那时的将其发送到读取起缓冲作用的人。
因主题在'\n’-'\r\n '经过有掉换。,它的在是旷日持久的的。读写二进制时,它不在
在任何任何人触地得分后得附加分中,将学习起缓冲作用的人切中要害录音整齐的学习文件。

   总地来说,从节目角度,C中主题或二进制读写都是起缓冲作用的人与文件中二进
制流的共有的,刚要主题读写时有来回换行的掉换.因而当写起缓冲作用的人中无换行符””\n””(0AH
),主题排与二语排的坐果同卵双胞,同样地,当文件中不在\r\n(0d00ah)时,主题
宣读与二进制宣读的坐果是相等地的。

   这时是任何人小顺序来公开宣称后面的意见。

1、构图列举如下顺序.该顺序将字母串”12\n3″分清以主题方式和二进制方式学习test1和t
est2,那时的在主题中

读test1,读取Test2。二进制方式

#include

int main()

{

    FILE * fp_text,* fp_binary;

    char write_buf[4]={””1””,””2””,””\n””,””3””};

    char read_buf_text[6],read_buf_binary[6];

    int read_count_text,read_count_binary;

    未检测到的吐艳毛病

    fp_text=fopen(“test1″,”wt+”);

    fp_binary=fopen(“test2″,”wb+”);

    fwrite(write_buf,4,1,fp课文)

    fwrite(write_buf,4,1,fp_binary);

    //fflush(fp课文)

    //fflush(fp_binary);

    fseek(fp_text,0L,SekKySET);//FISTH从属FFLUTH功能

    fseek(fp_binary,0L,SEEK_SET);//

    read_count_text=fread(read_buf_text,sizeof(char),5,fp课文)

    read_count_binary=fread(read_buf_binary,sizeof(char),5,fp_binary);

    加‘0’,关心蜡纸油印机字母串

    read_buf_text[read_count_text]=””\0””;

    read_buf_binary[read_count_binary]=””\0””;

    蜡纸油印机 Text Mode:read_count=%d,string=%s\n”,read_count_text,read_buf
课文)

    蜡纸油印机 Binary Mode:read_count=%d,string=%s\n”,read_count_binary,read
_buf_binary);

    fclose(fp课文)

    fclose(fp_binary);

    return 0;

}

2、顺序运转不及格,坐果列举如下。
):

 In Text Mode:read_count=4,string=12

  3                           主题读取与试验有关的1,读取字母和原始封面与试验有关的1
字母相等地

  In Binary Mode:read_count=4,string=12

  3                           在二进制状况下读取TEST1,读取字母和原始写与试验有关的1
的字母相等地

  3.用写字板记事本翻开TEST1和TEST2,坐果列举如下

  Test1的满足的:

 12

  3           性格写作,有换行所有物,见下面的4

  Test2的满足的

  123         二进制写的,无变化效应在\r\n远处的写字板记事本把持字母串
显示所有物,见下面的4

4、在二进制状况下翻开TEST1和TEST2(二进制状况),坐果列举如下。
构图软件也可以)

  Test1的满足的

  31 32 0D 0A 33//妖法,5八位字节,比学习丰盛的多的八位字节,在'n ''优于(0Ah)
拔出任何人''r''(0dh)

  Test2的满足的

  31 32 0A 33//妖法,4八位字节,学习丰盛的的值是划一的。

 5、总结

     从4可以看出。,课文排工夫,n′>r′n在性的间隔,在二进制状况下不注意掉换。
它可以从2和4引入。,当主题被读取时,从'r\n’->掉换为'n '。,在二进制状况下不注意掉换。
有兴趣的朗读者可以,以二进制状况读取TEST1或以主题状况读取TEST2。,看一眼会发作什么

  6。使牲口众多阐明

   前文扮演仅依从的Windows。,在linux中主题方式的读写与二进制方式的读写无差
别,前后经过不注意掉换。
像大约,当文件整齐的在Windows和Linux中共享时,,将涌现
与来回换行相干的成绩.下一篇性格《Linux主题文件与Windows主题文件间的掉换》将
让步了任何人将Linux主题文件掉换为Windows主题文件的C顺序。,敬请关怀^_^

转自: 

发表评论

电子邮件地址不会被公开。 必填项已用*标注