文件是指在电脑中存储的各种数据,这些数据以二进制形式存储在磁盘上,以文档、照片、歌曲、电影等在电脑中出现,一份文件中还可以交叉包含几种形式的存储内容,与我们平时写在纸上的文件不是一个概念。某一部分紧密相关的存储群体,就叫做一个文件。
每个人都要有名有姓,文件也一样,无论文件大小,每一个文件都必须给它一个命名,以便在相应的磁盘中找到它,这个名字叫做文件名。
就像人的名字分为姓和名一样,文件名也分为两部分,中间用一个圆点隔开,圆点后面的就是文件的“姓”,叫做扩展名。文件名最多可使用255个字符,除了开头字符外可以有空格,但不能使用正斜杠、反斜杠、冒号、星号、问号、大于号、小于号和竖线。文件名不区分大小写。
同一类型文件的扩展名相同,不同类型文件的扩展名不同,如Word 2010文件的扩展名一般为DOCX、而Excel 2010文件的扩展名一般为XLSX。电脑可以通过文件名很方便地对文件进行查找或存取 *** 作。
希望我能帮助你解疑释惑。
下面转载一下别人的方法1、判断字符范围。
该方式主要是针对英文字符的,如果文件中有中文字符就会判断失败。比如:
char c
f.read(&c, sizeof(c))
if (c <32 &&c != 9 &&c != 10 &&c != 13)
{
return
}
该方式针对256以下的字符问题都不大,一旦遇到双字节中文就会出现c为负数的情况,导致判断失败。
2、判断有没有char(0)字符。
二进制文件基本上都会有char(0),注意,是“基本上” 。
我尝试通过这个方式来判断,发现判断正确率很高,我手头的二进制STL文件都能够判断正确,但是总觉得这种方式不够保险,如果刚好某个二进制文件没有char(0)怎么办???
3、文件大小对比法。
以文本方式 打开文件,取一段数据(比如1024字节),存为string,再写入tmp文件,如果新文件的大小还是1024字节,应该就是文本文件了。否则就是二进制文件。
该方法我没有认证,但是纯粹从描述上来说,还是比较有效的。以我的理解,该方法在本质上还是方法1和方法2的结合,相比方法1来说,方便了中文字符的判断,相比方法2来说,更为保险一些。其本质就是通过将二进制文件转换为字符串,将一些无效字符过滤掉(比如char(0),回车等等),导致大小发生变化。但同样的该方法也有漏洞,如果二进制文件中刚好没有回车,没有char(0)怎么办???
4、无效字符比例法。
该方法是基于方法1的一种概率判断,遍历文件中的所有字符,对方法1中认定的无效字符进行计数,如果无效字符数量达到一定比例(这个比例值是经验值,根据自己的程序运行环境自由设定),则认为是二进制文件。
同方法1一样,无法对中文字符进行有效的判断,一个全为中文的文本文件,肯定会被认定为二进制文件。
5、严格对比法。
逐字节读取,然后满足以下任何一个条件那么就是二进制文件:
1)所读取字节大于127并且小于160;
2)所读取字节大于等于160并且不成对出现;(注:大于等于160并成对出现的是汉字,其他UNICODE字符集编码格式不是很清楚)
3)所读取字节小于32并且不等于9(TAB)、10(换行) (注: 10 是UNIX格式文本换行)
4)所读取字节小于32并且等于13(回车)但是之后的字节并不是10(换行) (注:13 10 是DOS格式文本换行)
该方法是最严谨的,也是判断最复杂的,效率最低的,一个较大的文件判断起来肯定会很慢。
二进制文件和文本文件都是用0和1这样的数字来储存的,那么为什么一个是二进制文件,一个是文本文件呢?这个取决于他的编码方式,比如下面这段
16进制49这个数,
他的二进制格式为:01001001
这段数字他本身只是一段数字,他只能表示01的这么一个序列,他不能表示任何信息
关键在于我们解读他的方式
如果我们按照char类型的数据来解读它,那么他就是字符 ‘I’
如果我们按照int型的数据来解读它,那么它就是数字73
所谓的文本文件和二进制文件,它里面储存的都是01数列,但是文本文件我们都只以字符的形式来识别他,而二进制文件在文本编辑器中,我们以字符的形式来识别他,但是在程序中我们直接将这串数列取出来,交由程序来判断要以什么形式来取用它,就有了更多的选择
这就是他们的区别,人本身很难判断出一个文件是不是二进制的,比如一个程序将它所有字符串型数据以二进制的格式存入,用文本编辑器看感觉他就是个文本文件,但实际上不是。
如果硬要算得话,二进制文件文件扩展名是.bat文本文件是.txt这只是人们的一种约定俗成
二进制文件因为是直接存取2进制数字串,比用文本文件存取更快,更节省空间
比如刚才int型数据73,如果我们把它存入文本文件,那么程序会将他先转化为字符串“73”,再拆分成单个的字符‘7’‘3’,然后再将每个字符以ASCll码得形式转化为2进制模式,然后存入文本文件,读取的过程相反,然而有了这个过程程序的读取 *** 作自然赶不上直接把73的二进制数直接存入文件来的要快,而且本身73是:01001001,只需要2个字节,但是转成ASCll码存储,7要占2个,4也要占两个,增加了一倍,所以程序读取二进制文件更高效更省空间
不过人很难解读二进制文件,所以如果用于人机交互,通常会将二进制文件转化成文本文件以便于人们解读
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)