假设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传输那么多数据?