如何保存任意文件?(100分)

  • 主题发起人 主题发起人 delphibird
  • 开始时间 开始时间
D

delphibird

Unregistered / Unconfirmed
GUEST, unregistred user!
&nbsp; 在LISTBOX中存放着要保存文件的路径及文件名,如C:/DELPHI/*.*<br>其中*.*为任何形式的文件。当我选中它,按保存按扭(BUTTON1),如何能实现保存呢?是用API函数,还是SAVEDIALOGY控件,具体怎样操作?<br>&nbsp; &nbsp;
 
要保存什么文件?<br><br>如果是任意类型的,<br>var myFile:File of myType;<br>&nbsp; &nbsp; myContent:myType;<br>begin<br>&nbsp; AssignFile(myFile,'myFile.ss');<br>&nbsp; rewrite(myFile);<br>&nbsp; writeln(myFile,myContent); //或是write <br>&nbsp; ....<br>&nbsp; CloseFile(myFile);<br>end;
 
要保存任意类型的文件
 
为了叙述方便,<br>称将要保存的文件为目标文件,已存在的文件为源文件。<br>在LISTBOX中存放的文件名对应的文件是目标文件还是源文件?<br>如果是目标文件,源文件在何处?还需详细说明。<br>
 
我想可以用API CopyFileEx()<br>BOOL CopyFileEx(<br>&nbsp; LPCTSTR lpExistingFileName, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // name of existing file<br>&nbsp; LPCTSTR lpNewFileName, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// name of new file<br>&nbsp; LPPROGRESS_ROUTINE lpProgressRoutine, // callback function<br>&nbsp; LPVOID lpData, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// callback parameter<br>&nbsp; LPBOOL pbCancel, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// cancel status<br>&nbsp; DWORD dwCopyFlags &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // copy options<br>);<br>
 
listbox中当然是存放的源文件的名称。
 
得看你原来的是什么东东了,你原来使用文件操作的,还用<br>文件操作,是 memo, 就用 memo1.lines.savetofile 等等,<br>
 
supermmx 我的文件是任意型的,不象你想象的那么简单。
 
用TFileStreem。
 
那你用pascal对文件的通用操作,读时先读进一定长度,然后按你需要的格式<br>显示,写的时候也这样写,关键是你定义好文件格式
 
我不是说了吗?原来是怎么操作的现在还怎么干?<br>要不然你的文件是怎么创建起来的?<br><br>一般来说, pascal 的文件操作很强大的,实在不行的话,用流<br>也行。
 
TFileStream很好用的, 或者用API的 _lread, _lwrite也可以, 效率比TFileStream<br>好像更高
 
方法1(强力推荐)<br>  通过调用Win 95系统外壳来完成,需要在USES子句中添加SHELLAPI单元。这种方法与Win 95下文件拷贝的方式完全一样,也会自动出现“正在拷贝...”的提示。如果目标文件已经存在,函数可以根据操作标志位自动生成多份复件。<br><br>  改变wFunc的值,则可以完成删除、更名、放到回收站等功能。笔者认为这是最好的一种方法。<br>  procedure TForm1.Button5Click(Sender: TObject);<br>  var<br>&nbsp;   F:TShFileOpStruct;<br>  begin<br>&nbsp;   F.wnd:=Handle;<br>&nbsp;   F.wFunc:=FO—COPY; {操作方式}<br>&nbsp;   F.pFrom:=′C:/DEMO.DAT′;<br>&nbsp;   F.pTo:=′F:/TEST.DAT′;<br>&nbsp;   F.fFlags:=FOF—ALLOWUNDO OR FOF—RENAMEONCOLLISION; {操作选项}<br>&nbsp;   if ShFileOperation(F)&lt;&gt;0 then<br>&nbsp; &nbsp;   ShowMessage(′文件拷贝失败!′);<br>  end;<br>
 
自己解决了?
 
多人接受答案了。
 
后退
顶部