昨天想做这么一个操作,就是将文件从一个文件夹拷贝到另一个文件夹中,同时删除源文件夹中的内容。想着挺简单的,于是就首先使用了MoveFile。
当目的文件夹中,不存在文件时,MoveFile成功。而当目的文件夹包含该文件时,MoveFile则调用不成功。他不支持覆盖。所以挪动文件,用MoveFile似乎不是首选。
此时,我想到的是DeleteAndRenameFile,
在SDK中解释到This function deletes the source file after it copies the content of the source file to the destination file. 拷贝源文件的内容到目的文件,然后删除源文件。看似符合要求,但是他要求调用该函数的时候目的文件必须存在。
这两个函数都不可行,结合起来到是不错的选择,可以满足要求。可惜我昨天没有这么想,昨天我想到了CopyFile。
CopyFile的原型是
BOOL CopyFile(
LPCTSTR lpExistingFileName,
LPCTSTR lpNewFileName,
BOOL bFailIfExists
);
最后一个参数表示当目的文件已经存在的时候,CopyFile调用成功还是失败的操作。如果为False,就可以覆盖拷贝了。
于是我就自己写了一个CopyAndDel的小函数。先拷贝再删除原来的文件。删除文件的时候还需要考虑一下文件属性的问题。
这个小函数的缺陷在于还需要考虑删除文件的属性问题。似乎利用MoveFile和DeleteAndRenameFile组合更好一些。
这里总结一下:
MoveFile 重命名一个文件或目录,包括它所有的孩子。可对文件夹进行操作。不过需要保证的是新文件或新文件夹不存在,否则调用失败。
DeleteAndRenameFile 当拷贝源文件的内容到目的文件后,删除源文件。需要保证目的文件在调用前已经存在。
CopyFile 拷贝一个已经存在的文件,并生成一个新的文件。不能对文件夹进行操作。
DeleteFile 删除一个文件。不能删除文件夹。该函数删除失败的时候,考虑一下文件的属性问题。
RemoveDirectory 删除一个空的文件夹。
CreateDirectory
功能:
This function creates a new directory. If the underlying file system supports security on files and directories, the function applies a specified security descriptor to the new directory.
(创建一个新的文件夹。如果基本的文件系统在文件或文件夹上支持安全描述,那么该函数将在新建的文件夹上应用指定的安全描述)
原型:
BOOL CreateDirectory(
LPCTSTR lpPathName,
LPSECURITY_ATTRIBUTES lpSecurityAttributes
);
参数:
lpPathName:包含将被创建的文件夹路径的字符串,字符串的长度不超过MAX_PATH。
lpSecurityAttributes:忽略,设为NULL
返回值:
成功则返回非零,失败则返回零。
备注:
Some file systems, such as NTFS file system, support compression or encryption for individual files and directories. On volumes formatted for such a file system, a new directory inherits the compression and encryption attributes of its parent directory.
In Windows CE 5.0 and later, full path canonicalization is performed before CreateDirectory processes a path name. As a result, trailing backslashes that may appear in a user-provided path name are ignored.
一些文件系统,像NTFS文件系统,对于个别的文件或目录支持压缩或加密。以卷格式化的文件系统,一个新的目录将继承它父目录的压缩和加密特性。
在Windows CE 5.0或以后的版本中,全路径的规范化将在CreateDirectory处理路径名字前执行。结果是,出现在用户指定的路径名中的反斜线将被忽略。