如何实现文件的修改(50分)

  • 主题发起人 主题发起人 lonelybug
  • 开始时间 开始时间
L

lonelybug

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个文本文件,然后想修改里面的一行的内容,可是我发现rewrite()打开的文件之后再用write()来写入内容只剩下写入的东西了,当然了我知道用rewrite打开是错误的,可是用reset来打开当写入的时候发现宝错i/o error 103请问如何实现局部修改文件内容!谢谢!
 
如果修改的是中间的内容,修改的字节数必须相同。
 
试试用Append打开,再用seek定位到要修改的地方。
 
我试了,可是我发现如果用append打开的话用seek定位要用到长整型的参数来定位可是我如何做呢,如果按行定位可以吗!?<br>谢谢了!
 
把文件的内容读出来,然后修改,再存回去<br>呵呵,知道了吧
 
你试试seek(#13#10)看如何?<br>【#13#10】是回车换行符。
 
用这个还是不行呀vecm,#13#10说这个参数类型不对。是这样的,我有一个文本文件里面存放这一个目录树的结构也就是说用Treeview.savtofile的方法存放了一个目录树,然后呢我想用我写的程序来改这个文件的一行内容比如第一行的内容是mybox然后我想改成myboxAAA这样子,请问有没有好点的办法!谢谢了
 
修改文件不能用标准的Pascal文件操作,必须以读写方式打开文件
 
如果你是文本文件,还是读出来,在内存中修改,然后再写回去。<br><br>var<br>&nbsp; &nbsp;s:TStrings;<br>&nbsp; &nbsp;N:integer;<br>begin<br>&nbsp; &nbsp;s:=TStringList.create;<br>&nbsp; &nbsp;s.LoadFromFile('.....');<br>&nbsp; &nbsp;N:=.... ; &nbsp;///你要改的行。<br>&nbsp; &nbsp;s.strings[N]:='...........';<br>&nbsp; &nbsp;s.SaveToFile(.......);<br>&nbsp; &nbsp;s.Free;<br>end;
 
同jsxjd<br>不过应该用TFILESTREAM吧?
 
按本意,应该是按行组织的文本文件。
 
参考jsxjd的提示,可以这样作,试试看:<br>var<br>&nbsp; &nbsp;s:TStrings;<br>&nbsp; &nbsp;N,i:integer;<br>begin<br>&nbsp; &nbsp;s:=TStringList.create;<br>&nbsp; &nbsp;s.LoadFromFile('.....');<br>&nbsp; &nbsp;//<br>&nbsp; &nbsp;for i:=0 to s.count-1 do<br>&nbsp; &nbsp;begin<br>&nbsp; if pos('mybox',s)&gt;0 then<br>&nbsp; &nbsp;stringreplace(s,'mybox','myboxAAA',[rfReplaceAll, rfIgnoreCase]);<br>&nbsp; &nbsp; end;<br>&nbsp; &nbsp;// <br>&nbsp; &nbsp;s.SaveToFile(.......);<br>&nbsp; &nbsp;s.Free;<br>end;<br>
 
xuxincheng,你误解了,我说的是要直接修改文本文件,而不是要修改完Treeview之后再存成文件,那样太肺资源了!<br>不过这个问题我解决了!不是用直接修改文件完成的,比他还简单,哈哈!<br>不过有个新问题,如何把一个文件拷贝到另一个地方我怎么也找不到这个函数了,告诉我吧!谢谢了!<br>
 
The CopyFile function copies an existing file to a new file. <br><br>BOOL CopyFile(<br>&nbsp; &nbsp; LPCTSTR lpExistingFileName, // pointer to name of an existing file <br>&nbsp; &nbsp; LPCTSTR lpNewFileName, // pointer to filename to copy to <br>&nbsp; &nbsp; BOOL bFailIfExists // flag for operation if file exists <br>&nbsp; &nbsp;); <br>&nbsp;<br>Parameters<br>lpExistingFileName<br>&nbsp; &nbsp;Points to a null-terminated string that specifies the name of an existing file. <br>lpNewFileName<br>&nbsp; Points to a null-terminated string that specifies the name of the new file. <br>bFailIfExists<br>&nbsp; Specifies how this operation is to proceed if a file of the same name as that specified by lpNewFileName already exists. If this parameter is TRUE and the new file already exists, the function fails. If this parameter is FALSE and the new file already exists, the function overwrites the existing file and succeeds. <br><br>Return Values<br>&nbsp; If the function succeeds, the return value is nonzero.<br>
 
我想问问如何把一个string型的文件名字比如"test.txt"变成Pchar型的文件名子你给的这个函数属于api的,我不太会写里面的参数,我总觉得他和delphi好想过不去。你能告诉我如何转换吗!
 
也方便,有的只能用 API,最后一个参数 false ,存在时覆盖。<br>procedure TForm1.Button1Click(Sender: TObject);<br>var<br>&nbsp; &nbsp;s1,s2:string;<br>begin<br>&nbsp; &nbsp;if copyfile('D:/temp/Delphi/cc.txt','cc.bak',false)<br>&nbsp; &nbsp;then showmessage('Ok');<br>&nbsp; &nbsp;s1:='D:/temp/Delphi/cc.txt';<br>&nbsp; &nbsp;s2:='D:/temp/ccc2.bak';<br><br>&nbsp; &nbsp;if copyfile(pchar(s1),pchar(s2),false)<br>&nbsp; &nbsp;then showmessage('Ok');<br>end;<br>
 
后退
顶部