Re: sparse-files

From
Alex Fedotov ()
To
Pavel Pahomov ()
Date
2001-11-05T02:27:45Z
Area
SU.WINDOWS.NT.PROG
From: "Alex Fedotov" <me@alexfedotov.com>

Pavel Pahomov wrote:

>  AF> if(!oks)
>  AF>       {
>  AF>       DWORD le = GetLastError();
>  AF>       puts("Can't create sparse-file\n");
>  AF>       return 1;
>  AF>       }
>
> Замечание дельное, согласен. Но результат тот же :)
>
> ps: может надо еще какие-то другие библиотеки линковать? Непонятно...

Вот только что написал то же самое, работает без ошибок и даже
GetFileAttributes правильные атрибуты возвращает. Что называется, найдите
десять отличий. Ты уверен, что файловая система правильная?

- --- cut ---
HANDLE hFile = CreateFile(_T("C:\\sparse.dat"),
                          GENERIC_READ|GENERIC_WRITE,
                          FILE_SHARE_READ|FILE_SHARE_WRITE,
                          NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,
                          NULL);
if (hFile != INVALID_HANDLE_VALUE)
{
    DWORD cbReturned;
    if (!DeviceIoControl(hFile, FSCTL_SET_SPARSE, NULL, 0, NULL, 0,
                         &cbReturned, NULL))
    {
        DWORD dwError = GetLastError();
        _RPT1(_CRT_WARN, "DeviceIoControl failed, err=%d\n", dwError);
    }

    CloseHandle(hFile);
}

_ASSERTE(GetFileAttributes(_T("C:\\sparse.dat")) &
         FILE_ATTRIBUTE_SPARSE_FILE);
- --- cut ---

Еще можно рассмотреть гипотетическую возможность (я в нее не верю), что
ребята из Microsoft mess up с константой FSCTL_SET_SPARSE в разных версиях
Platform SDK. У меня она определена как

#define FSCTL_SET_SPARSE   \
    CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 49, METHOD_BUFFERED,
FILE_SPECIAL_ACCESS)

-- Alex Fedotov

--- ifmail v.2.15dev5
 * Origin: Undisclosed (2:5020/400)