20. 11.
看书上说文件分为文本文件,类型文件(纪录文件),无类型文件(二进制文件);
现在我有1个exe程序,但是我想把他的ini配置文件写到exe文件的尾部,
通过分割二进制文件,分割出配置文件:
看网上说函数filewrite,fileread,blockwrite,blockread,都可以对该类型的文件进行操作,我是这样定义的:
var
x,x1:Integer;
y,y2:string;
begin
x:=FileOpen('1.wma',fmOpenReadWrite);
if x>0 then
begin
x1:=FileSeek(x,0,2);
FileSeek(x,0,0);
y:=StringOfChar(#0,x1);
FileRead(x,y[1],x1);
FileClose(x);
x:=FileOpen('2.wma',fmOpenReadWrite);
if x>0 then
begin
y2:='|–|'+y[1];
FileWrite(x,y1,x1);
FileClose(x);
end;
end;
end;
但是我再用string类型数据取出这段二进制码,查找不到我定义的'|–|'字符,请各位大虾帮忙~!,书上说存取二进制数据是不分数据类型的啊!为什么不可以???
建议不这么做
效率太低了
你知道应该怎么作吗?老大
巨汗!!!
里面写的是二进制的,但用文件打开的是十六进制的,你写入的是ASCII码的,这个…….
你最好是打开一个文件,然后,把ASCII码转成十六进制.
我只想知道为什么我写入的字符|–|找不到,是不是应该先把他写成二进制格式再放入,还是???
你的意思是说用FileOpen打开文件,用FileRead读入的是16进制的数据,我应该先把|-|转换为16进制的,然后写入就没有问题了??是不是老大
做个记号
FileRead(x,y[1],x1);
y又不是数组,这样取值对吗?
其实我对文件操作也不是很了解,具体为什么要这样取出数据,我也说不上来,反正上面的代码要想完全取出整个文件的内容就必须这样写,否则编译器也会报错,具体,不知道,
———请各位老大回答正题啊,給个例子把,谢谢了
。。。。。。。。。。现在这么多人对计算机内部数据什么类型什么格式不了解??????都是程序员吗?还是学生?
唉。。。。。。。。。。。。。。。
计算机内部数据不分十进制,十六进制的,它只以二进制形式存起来,显示的时候才会有进制问题。
字符及字符串存进去取出来,有进制问题????????
唉,我自己测试出来了,什么进制转换,都不用,直接用filewrite写进去就是了,我用UltraEdit-32看到我的程序后面有我写的内容了~!……….结帖郁闷,本来问问题的,不来回答都说写不着边的问题,郁闷的要紧~!
不知所云。
个人的建议是,如果是按这种方式去操作,最好在文件的末尾,比如用四个字节做一个特殊的标记,再往前的位置存储配置文件的长度,然后再往前放文件的内容。
读取时,先从末尾读取标记,如果读取文件的末尾的标记正常,则,继续往前读长度,之后再根据长度往前读文件数据。
类似的东西,比较典型的用例,就是早期版本的可以自播放的Flash(exe程序自己播放程序末尾的Flash文件).