昨天想做這么一個(gè)操作,就是將文件從一個(gè)文件夾拷貝到另一個(gè)文件夾中,同時(shí)刪除源文件夾中的內(nèi)容。想著挺簡(jiǎn)單的,于是就首先使用了MoveFile。當(dāng)目的文件夾中,不存在文件時(shí),MoveFile成功。而當(dāng)目的文件夾包含該文件時(shí),MoveFile則調(diào)用不成功。他不支持覆蓋。所以挪動(dòng)文件,用MoveFile似乎不是首選。此時(shí),我想到的是DeleteAndRenameFile,在SDK中解釋到This function deletes the source file after it copies the content of the source file to the destination file. 拷貝源文件的內(nèi)容到目的文件,然后刪除源文件。看似符合要求,但是他要求調(diào)用該函數(shù)的時(shí)候目的文件必須存在。這兩個(gè)函數(shù)都不可行,結(jié)合起來(lái)到是不錯(cuò)的選擇,可以滿足要求。可惜我昨天沒(méi)有這么想,昨天我想到了CopyFile。CopyFile的原型是BOOL CopyFile( LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName, BOOL bFailIfExists ); 最后一個(gè)參數(shù)表示當(dāng)目的文件已經(jīng)存在的時(shí)候,CopyFile調(diào)用成功還是失敗的操作。如果為False,就可以覆蓋拷貝了。于是我就自己寫了一個(gè)CopyAndDel的小函數(shù)。先拷貝再刪除原來(lái)的文件。刪除文件的時(shí)候還需要考慮一下文件屬性的問(wèn)題。
這個(gè)小函數(shù)的缺陷在于還需要考慮刪除文件的屬性問(wèn)題。似乎利用MoveFile和DeleteAndRenameFile組合更好一些。這里總結(jié)一下:MoveFile 重命名一個(gè)文件或目錄,包括它所有的孩子??蓪?duì)文件夾進(jìn)行操作。不過(guò)需要保證的是新文件或新文件夾不存在,否則調(diào)用失敗。DeleteAndRenameFile 當(dāng)拷貝源文件的內(nèi)容到目的文件后,刪除源文件。需要保證目的文件在調(diào)用前已經(jīng)存在。CopyFile 拷貝一個(gè)已經(jīng)存在的文件,并生成一個(gè)新的文件。不能對(duì)文件夾進(jìn)行操作。DeleteFile 刪除一個(gè)文件。不能刪除文件夾。該函數(shù)刪除失敗的時(shí)候,考慮一下文件的屬性問(wèn)題。RemoveDirectory 刪除一個(gè)空的文件夾。