曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 7029|回复: 0
打印 上一主题 下一主题

[文件与IO] MoveFile()/MoveFileEx() -- 重命名和移动文件

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2011-9-8 20:56:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
重命名和移动文件文件有两个函数:
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 重启后现有文件会被删除。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-18 23:10 , Processed in 0.076832 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表