2017-03-02 69 views
0

以下是将A驱动器的内容传输到C:\ test \ disk1中的一些代码。该程序编译并运行良好。该程序创建一个名为“软盘驱动器(A)”的文件夹,内容包含在其中。是否有可能只从A驱动器复制文件而没有文件夹?SHFileOperation - 仅文件复制

#include <Windows.h> 
#include <stdio.h> 

int main(int argc, char ** argv) 
{ 
    const wchar_t *const sourceFile = L"A:\\\0"; 
    const wchar_t *const outputFile = L"C:\\test\\disk1\0"; 

    SHFILEOPSTRUCTW fileOperation; 
    memset(&fileOperation, 0, sizeof(SHFILEOPSTRUCTW)); 

    fileOperation.wFunc = FO_COPY; 
    fileOperation.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR | FOF_NOERRORUI | FOF_FILESONLY; 
    fileOperation.pFrom = sourceFile; 
    fileOperation.pTo = outputFile; 

    int result = SHFileOperationW(&fileOperation); 
    if (result != 0) 
    { 
     printf("SHFileOperation Failure: Error%u\n", result); 
     return 1; 
    } 

    memset(&fileOperation, 0, sizeof(SHFILEOPSTRUCTW)); 

    printf("Transfer complete\n"); 

} 

回答

0

这里是SHFILEOPSTRUCTW结构的基准: https://msdn.microsoft.com/en-us/library/windows/desktop/bb759795(v=vs.85).aspx

FOF_FILESONLY Perform the operation only on files (not on folders) if a wildcard file name (*.*) is specified.

完整的解决方案将是这样的:

#include <Windows.h> 
#include <stdio.h> 

int main(int argc, char ** argv) 
{ 
    const wchar_t *const sourceFile = L"A:\\*.*\0"; 
    const wchar_t *const outputFile = L"C:\\test\\disk1\0"; 

    SHFILEOPSTRUCTW fileOperation; 
    memset(&fileOperation, 0, sizeof(SHFILEOPSTRUCTW)); 

    fileOperation.wFunc = FO_COPY; 
    fileOperation.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR | FOF_NOERRORUI | FOF_FILESONLY; 
    fileOperation.pFrom = sourceFile; 
    fileOperation.pTo = outputFile; 

    int result = SHFileOperationW(&fileOperation); 
    if (result != 0) 
    { 
     printf("SHFileOperation Failure: Error%u\n", result); 
     return 1; 
    } 

    memset(&fileOperation, 0, sizeof(SHFILEOPSTRUCTW)); 

    printf("Transfer complete\n"); 

} 
+0

干杯Betontalpfa。编译时出现此错误。 'C:\ C++ \ shfileop \ main.cpp | 16 |错误:期望数字常量之前的非限定id |'有什么建议么? –

+0

FOF_FILESONLY 如果指定了通配符文件名(\ *。*),则仅对文件(不在文件夹上)执行操作。 – betontalpfa

+1

是的,我想要从A驱动器传输所有文件。但它不会编译。你能否详细说明一下? –