MoveFileWithProgress

MoveFileWithProgress

簡介,功能表述,函式功能,函式原型,參數說明,返回值,vc的一個例子,

簡介

windows api: 
MoveFileWithProgress 功能與 MoveFileEx是相同的,只不過 MoveFileWithProgress 允許你提供一個接收移動進度訊息的回調函式

功能表述

函式功能

MoveFile函式移動已存在的檔案或資料夾,包括它的子檔案和資料夾。只能在同一目錄或volume(卷)下移動
MoveFileEx 或 MoveFileWithProgress 指定如何去移動檔案。可以在不同volume下移動,但必須指定MOVEFILE_COPY_ALLOWED,但有時移動不成功,會出現error(5)的錯誤,這跟系統的讀取許可權有關。
MoveFileTransacted 允許執行事務處理的操作。

函式原型

BOOL WINAPI MoveFileWithProgress(
__in LPCTSTR lpExistingFileName, //已經存在的檔案名稱
__in_opt LPCTSTR lpNewFileName,//新的檔案名稱
__in_opt LPPROGRESS_ROUTINE lpProgressRoutine, //進度訊息回調
__in_opt LPVOID lpData, //作為參數傳遞到 進度訊息回調函式中,可為空
__in DWORD dwFlags //移動選項
);

參數說明

lpExistingFileName 一個存在的檔案或者資料夾字元串指針
lpNewFileName 一個還沒存在的檔案或者資料夾的字元串指針
lpProgressRoutine 一個指向處理進度訊息的回調函式
lpData 一個指向作為參數傳遞到 進度訊息回調函式中,可為空
dwFlags dword類型 可以為一個或多個下述常數:
MOVEFILE_COPY_ALLOWED  如移動到一個不同的卷,則複製檔案並刪除原來的檔案。 MOVEFILE_CREATE_HARDLINK 系統保留,以供將來使用。 MOVEFILE_DELAY_UNTIL_REBOOT 移動操作在系統下次重新啟動時正式進行。 MOVEFILE_FAIL_IF_NOT_TRACKABLE 如果來源檔案是一個 LINK 檔案,但是檔案在移動後不能夠被 TRACKED,則函式執行失 敗。如果目標檔案在一個 FAT 格式的檔案系統上,則上述情況可以發生。這個參數不支持NT 系統。
MOVEFILE_REPLACE_EXISTING  如目標檔案存在,則將其替換 。 MOVEFILE_WRITE_THROUGH 這個標記允許函式在執行完檔案移動操作後才返回,否者不等檔案移動完畢就直接返回 。如果設定了 MOVEFILE_DELAY_UNTIL_REBOOT 標記,則 MOVEFILE_WRITE_THROUGH 標記將被忽略。

返回值

如果函式成功返回非零值。

vc的一個例子

#define _WIN32_WINNT 0x0500 // 不加這個不能通過編譯
#include <windows.h>
#include <stdio.h>
DWORD CALLBACK CopyProgress(
LARGE_INTEGER TotalFileSize, // total file size, in bytes
LARGE_INTEGER TotalBytesTransferred, // total number of bytes transferred
LARGE_INTEGER StreamSize, // total number of bytes for this stream
LARGE_INTEGER StreamBytesTransferred, // total number of bytes transferred for this stream
DWORD dwStreamNumber, // the current stream
DWORD dwCallbackReason, // reason for callback
HANDLE hSourceFile, // handle to the source file
HANDLE hDestinationFile, // handle to the destination file
LPVOID lpData // passed by CopyFileEx
)
{
static int nRecord = 0;
nRecord++;
printf("回調次數:%d 已傳輸:%08X:%08X 檔案大小:%08X:%08X ",
nRecord,
TotalBytesTransferred.HighPart,
TotalBytesTransferred.LowPart,
TotalFileSize.HighPart,
TotalFileSize.LowPart);
return PROGRESS_CONTINUE;
}
int main(int argc, char* argv[])
{
if(argc!=3)
{
printf("用法:命令 源檔案 目標檔案");
return 0;
}
if(!CopyFileEx(argv[1],argv[2],(LPPROGRESS_ROUTINE)CopyProgress,NULL,FALSE,COPY_FILE_FAIL_IF_EXISTS))
{
printf("CopyFileEx() failed.");
return 0;
}
return 0;
}

相關詞條

熱門詞條

聯絡我們