文本文件的操作,我不能搞定,100分相赠,救我一命啊!(100分)

  • 主题发起人 主题发起人 CCTVJY
  • 开始时间 开始时间
C

CCTVJY

Unregistered / Unconfirmed
GUEST, unregistred user!
y(1)
是这样的:
我在对一个文本文件操作,但总是不能正确写入东西!
var
tsfile:tfilestream;
S:string;
..
begin
..
tsfile.seek(12,0);//当然文件远大于12
tsfile.writebuffer(,length(S));
..
写入之后总是把原先的东西给覆盖了,而且写入的
还是一些我不想写的东西,
怎么办?
对你来说,并不难,
100分,怎么样,不够再加!
(2)
另外还有一个问题,是这样的:我打开(f:ftextfile)一个
文件后,却不能写东西在任意位置,只能在后面(append)
 
To cctvjy
(1)
>tsfile.writebuffer(,length(S));
你用下面的试一下:
tsfile.writebuffer(pchar(S)^,length(S));
(2)
一般不像你这样用!

 
>>>tsfile.writebuffer(,length(S));
????
应该是tsfile.writebuffer(s[1], length(s));吧?
 
//如果只是纯文本
//我喜欢这样
var f:text;
begin
assign(f,'Filename');
...

writeln(f,'sth you want to write');
你可以试一试
end;
 
是不是文件的打开方式不对
 
如果是“写入之后总是把原先的东西给覆盖了”,那么可以肯定
是tsfile.create时调用的参数不对。要想追加数据要用
fmOpenReadWrite。详细的资料可以在delphi的help里找。
我觉得FileStream是最好,最快的方法。
 
是文本文件吗?那好办.
例如:文件a.txt的内容是'123456789'
你的意思是想在4和5中间插入'abc'
变成'1234abc56789',可以这样:
...
string1:='1234';
{先把要插入的地方的前面存给一个字符串(假设长度为4,就是你要seek的长度)}
srting2:='56789';
{在把后面存给一个字符串(长度为总长度减去seek的长度)}
result:=string1+'abc'+string2;
然后把result存进a.txt(完全覆盖)就行了.
懂了吗?<font color=red>Delphi不允许在文本文件的任何位置进行插入,<br>
估计这样办比较好.</font>
欢迎继续讨论: mophy@188.net
 
感谢大家的回答!(不一一拜谢了)
首先更正一个我写的错误
tsfile.writebuffer(,length(S));
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
应为
tsfile.writebuffer(S,length(S));
我打开文件的操作为:
tsfile:=tfilestream.create(opendialog1.filename,fmopenreadwrite);
>beta
后来 我确实是用的这种办法,但写入的时间太长了,文件的长度为300K多
需要插入的东西太多,因此写入的时间太长。
>YunEr
因为每次写入东西总是写些怪字符,我试了你说的后就没有了
这是为什么?
请说明为什么要这样用?

谢谢大家的回答,祝各位“情人节”快乐!(唉,没有她的情人节,让我好难过!)
 
有没有大侠提供更好的办法呢?
 
将delphi的string变为pchar就可以了?
难道是delphi的字符串类型有兼容性问题?
我一直直接用string,也没有问题呀?
 
这是我的亲自经历,有的时候用string 很正常,可有的时候
就写怪字符,读取的时候就更惨了,有时根本就不读,如果不
指明string的大小,不用pchar!没得说,为了尽快完工,也
就不管那么多,用了行就行!
 
可能是delphi本身的bug吧
 
因为 Pascal 对指针引用的定义本身很混乱,谁在 Pascal 的书中看到过诸如:
指向存储变量的值的指针(对汇编以外的语言来说就是变量)

指向存储变脸的值的地址的指针(在 Delphi 里同样称之为变量)
这类话,将该类对应机器语言的不同组织形式的细节在高级语言中通常被掩盖起来,
所以就可以理解
void test(LPVOID s)
被写成
Procedure Test(Const s)
因为在 Pascal 中根本不存在以上的概念
 
不要怀疑Delphi,你只是不了解她罢了。
 
希望继续讨论!
 
其实也没什么
CString还会出错呢.
我看不如都写到一个临时文件中写到要插入处就先写插入字符
然后接着写后面的,注意不要用文本方式读写,否则会很慢,
用流或者块
 
多谢各位的回答,这个问题在各位的帮助下解决了
特别感谢YunEr,他(她)对这个问题很关注。
同时也感谢各位的关心!
在此把分!再见啦…………
 
pchar and string is diffrent type of string in pascal,
pchar is ended by #0,and string is standard string type of pascal
so if you transform string into pchar,perhaps there exist some problem
but you can add #0 in the end of a string
pchar:=string+#0;
 
多人接受答案了。
 
后退
顶部