将文件指针设置在SMB共享上的文件末尾之外

时间:2014-05-20 10:44:40

标签: winapi file-io smb

假设Z是网络映射驱动器,通过samba连接。 有两个代码段:

{//block A
    HANDLE hndl = CreateFile(L"Z:\\file1.bin", GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
    LARGE_INTEGER pos, out;
    pos.QuadPart = 1073741824ULL;
    DWORD res = SetFilePointerEx(hndl, pos, &out, FILE_BEGIN);
    DWORD written;
    SetEndOfFile(hndl);
    WriteFile(hndl, &hndl, sizeof(hndl), &written, NULL);
    CloseHandle(hndl);
}

{//block B
    HANDLE hndl = CreateFile(L"Z:\\file2.bin", GENERIC_READ|GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
    LARGE_INTEGER pos, out;
    pos.QuadPart = 1073741824ULL;
    DWORD res = SetFilePointerEx(hndl, pos, &out, FILE_BEGIN);
    DWORD written;
    SetEndOfFile(hndl);
    WriteFile(hndl, &hndl, sizeof(hndl), &written, NULL);
    CloseHandle(hndl);
}

如您所见,对于块B,区别仅在于打开文件时使用的访问模式。 但是,这种差异会导致操作上的巨大差异: 块A几乎是瞬间执行的,而块B则通过网络传输超过1GB的数据。 有没有办法避免为块B传输那么多数据?

0 个答案:

没有答案