请输入您要查询的百科知识:

 

词条 MoveFileWithProgress
释义

简介

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;

}

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/1/27 5:12:29