请教如何使用Delphi程序修改文件名(50分)

  • 主题发起人 主题发起人 HY_IHFGHY_HY
  • 开始时间 开始时间
H

HY_IHFGHY_HY

Unregistered / Unconfirmed
GUEST, unregistred user!
各位高人,请赐教:<br>&nbsp; &nbsp; Delphi是否有自带的修改文件名称的函数,有请说明用法,<br>另外怎样使用API函数修改文件名,请举几个Delphi对文件进行操作的例子,<br>最好是使用API函数的,谢谢!
 
对了,还有Copy文件的API函数,谢谢!
 
function RenameFile(const OldName, NewName: string): Boolean;<br>function CopyFile(const SrcPath, DestPath : AnsiString) : Cardinal;<br>关于文件的操作你可以参考Delphi帮助中file management routines的内容,比较详细。
 
如把C:/a.txt文件名改为b.txt<br>RenameFile('C:/a.txt','C:/b.txt')<br>如把C:/a.txt文件复制到C:/temp/下<br>CopyFile('C:/a.txt','C:/temp/a.txt')
 
Rename<br><br>CopyFile<br>CopyFileEx<br>查MSDN吧!
 
也可以使用API函数:<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>用法:CopyFile(PChar('C:/a.txt'),PChar('C:/temp/a.txt'),False);<br>其中bFailIfExists参数如果为True,那么当C:/temp/a.txt这个文件已经存在时函数就执行失败,失败情况可以通过GetLastError函数获得,如果参数为False,那么C:/temp/a.txt存在时将新复制来的文件将覆盖这个旧文件。<br>另外,你也可以使用SHFileOperation函数直接调用Windows的复制,和我们平时复制文件的样子时一样的,有进度条,有动画。具体你可以查一下,论坛中很多的。
 
function MoveFile( lpExistingFilename : pAnsiChar; lpNewFilename : pAnsichar) : longBool;//改名文件的另一函数,在Windows单元<br>function CopyFile(lpExistingFileName : PAnsiChar; lpNewFileName : PAnsichar) : LongBool;//复制文件,在Windows单元<br>
 
请问SHFileOperation函数怎么用?谢谢!
 
复制文件的例子,剪切和这个类似,把fsTemp.wFunc改为FO_MOVE就可以了:<br>var <br>&nbsp; sPath:string; <br> sTemp:SHFILEOPSTRUCT; <br> i:integer; <br>begin <br> sPath:=InputBox('文件操作','输入移动路径','c:/windows'); <br> if sPath&lt;&gt;''then <br>&nbsp; begin <br>  fsTemp.Wnd := Self.Handle; <br>  fsTemp.wFunc :=FO_COPY; <br>  fsTemp.fFlags :=FOF_ALLOWUNDO; <br>  for i:=0 to ListBox1.Items.Count-1 do <br>&nbsp; &nbsp; begin <br>   &nbsp;fsTemp.pFrom := PChar(ListBox1.Items.Strings); <br>&nbsp;   fsTemp.pTo := PChar(sPath); <br>  &nbsp; fsTemp.lpszProgressTitle:='移动文件'; <br>  &nbsp; &nbsp;if SHFileOperation(fsTemp)&lt;&gt;0 then <br>  &nbsp; &nbsp;ShowMessage('文件复制失败'); <br>&nbsp; &nbsp; end;<br> end; <br>end; <br><br>
 
SDN翻译如下:<br>ShFileOperation只有一个参数是LPSHFILEOPSTRUCT型的相当于delphi中的TSHFileOpStruct;<br>c语言定义为:<br>typedef struct _SHFILEOPSTRUCT{ <br>&nbsp; &nbsp; HWND &nbsp; &nbsp; &nbsp; &nbsp; hwnd; <br>&nbsp; &nbsp; UINT &nbsp; &nbsp; &nbsp; &nbsp; wFunc; <br>&nbsp; &nbsp; LPCSTR &nbsp; &nbsp; &nbsp; pFrom; <br>&nbsp; &nbsp; LPCSTR &nbsp; &nbsp; &nbsp; pTo; <br>&nbsp; &nbsp; FILEOP_FLAGS fFlags; <br>&nbsp; &nbsp; BOOL &nbsp; &nbsp; &nbsp; &nbsp; fAnyOperationsAborted; <br>&nbsp; &nbsp; LPVOID &nbsp; &nbsp; &nbsp; hNameMappings; <br>&nbsp; &nbsp; LPCSTR &nbsp; &nbsp; &nbsp; lpszProgressTitle; <br>} SHFILEOPSTRUCT, FAR *LPSHFILEOPSTRUCT; <br><br>相应的pascal就是:<br>type <br>&nbsp; &nbsp; _SHFILEOPSTRUCTA = packed record<br>&nbsp; &nbsp; Wnd: HWND;<br>&nbsp; &nbsp; wFunc: UINT;<br>&nbsp; &nbsp; pFrom: PAnsiChar;<br>&nbsp; &nbsp; pTo: PAnsiChar;<br>&nbsp; &nbsp; fFlags: FILEOP_FLAGS;<br>&nbsp; &nbsp; fAnyOperationsAborted: BOOL;<br>&nbsp; &nbsp; hNameMappings: Pointer;<br>&nbsp; &nbsp; lpszProgressTitle: PAnsiChar; { only used if FOF_SIMPLEPROGRESS }<br>&nbsp; end; <br>hwnd:用来显示操作状态的对话框句柄。 例中是form1的句柄<br>wFunc:执行的操作。可以是以下各值:(例中是FO_COPY)<br>&nbsp; &nbsp; &nbsp; &nbsp; FO_COPY:拷贝pfrom域中指定的(目录,例中是'c:/a')到pto中指定的位置(例中为'c:/b') <br>&nbsp; &nbsp; &nbsp; &nbsp; FO_DELET:删除pfrom中指定的文件. &nbsp; (pTo不用) <br>&nbsp; &nbsp; &nbsp; &nbsp; FO_MOVE:移动PFrom中指定的文件到pto中指定的位置。 &nbsp;<br>&nbsp; &nbsp; &nbsp; &nbsp; FO_RENAME:给PFrom中指定的文件改名。<br>pFrom:指定一个或多个源文件名的缓冲区地址。多个名字必须用NULL分隔。名字列表必须用两个NULL(nil,'/0')来结束。<br>pTo:目标文件或目录名缓冲区地址。 如果fFlags域指定FOF_MULTIDESTFILES,缓冲区可以包含多个目标文件名。多个名字必须用NULL分隔。名字列表必须用两个NULL(nil,'/0')<br>fFlags :控制操作的标志,可以是以下各值组合:<br>&nbsp; &nbsp; &nbsp; &nbsp; FOF_ALLOWUNDO:保留Undo信息, 如果pFrom没有包含全的绝对的路径或文件名此值忽略。<br>&nbsp; &nbsp; &nbsp; &nbsp; FOF_CONFIRMMOUSE:没有实现.<br>&nbsp; &nbsp; &nbsp; &nbsp; FOF_FILESONLY:只有文件名使用通配符时(*.*)才对文件操作。<br>&nbsp; &nbsp; &nbsp; &nbsp; FOF_MULTIDESTFILES: &nbsp;pTo域指一定了多个目标文件.(一个对就一个源文件) 而不是指定一个目录来存放所有源文件 &nbsp;<br>&nbsp; &nbsp; &nbsp; &nbsp; FOF_NOCONFIRMATION:所有显示的对话框全部选择yes to all<br>&nbsp; &nbsp; &nbsp; &nbsp; FOF_NOCONFIRMMKDIR: 如果需要创建一个新目录不确认。<br>&nbsp; &nbsp; &nbsp; &nbsp; FOF_NOCOPYSECURITYATTRIB
 
接受app2001和miaofeng的答案,谢谢!
 
后退
顶部