曲径通幽论坛

标题: MoveFile()/MoveFileEx() -- 重命名和移动文件 [打印本页]

作者: beyes    时间: 2011-9-8 20:56
标题: MoveFile()/MoveFileEx() -- 重命名和移动文件
重命名和移动文件文件有两个函数:
MoveFile() 和其扩展 MoveFileEx(),它们的原型如下:
BOOL WINAPI MoveFile(
  __in  LPCTSTR lpExistingFileName,
  __in  LPCTSTR lpNewFileName
);
BOOL WINAPI MoveFileEx(
  __in      LPCTSTR lpExistingFileName,
  __in_opt  LPCTSTR lpNewFileName,
  __in      DWORD dwFlags
);
在 MoveFile() 中,第 1 个参数表示已经存在的且要重命名的文件,第 2 个参数表示重命名后的名字。比如:
MoveFile ((LPCTSTR)_T("123.txt"), (LPCTSTR)_T("1234.txt"));
将当前目录下的 123.txt 重命名为 1234.txt 。

又如:
MoveFile ((LPCTSTR)_T("D:\\1234.txt"), (LPCTSTR)_T("C:\\12345.txt"));
将 D 盘下的 1234.txt 移到 C 盘下并命名为 12345.txt 。如果只是移动的话,那就写成 C:\\12345.txt,但不能只写成 C:\\ 。此外,需要注意的是新文件可以位于不同的文件系统或驱动器中,但新目录必须在同一个驱动器中。

如果新文件已经存在的话,MoveFile() 就会失败,此时可用 MoveFileEx() 来覆盖现有文件。对 MoveFileEx()  第 3 个参数 dwFlags 几个选项说明如下:

1. MOVEFILE_REPLACE_EXISTING
使用这个选项可以替换掉现有文件。

2. MOVEFILE_WRITE_THROUGH
使用该选项可以确保函数在复制的文件尚未刷新(flush)到磁盘上之前不返回 --- 这种行为就是 write through (通写) 。

3. MOVEFILE_COPY_ALLOWED
当新文件位于不同的卷时(不同的盘中),该选项模拟先通过 CopyFile 复制文件,然后再 DeleteFile 掉原文件来完成操作。

4. MOVEFILE_DELAY_UNTIL_REBOOT
该选项不能和 MOVEFILE_COPY_ALLOWED 一起使用,且它仅限于有管理员权限的进程使用,它确保只有在 Windows 重启之后文件移动才生效。此外,如果新文件名为空,那么当 Windows 重启后现有文件会被删除。




欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2