Столкнувшись с проблемой создания файловых потоков для файла в сетевой папке - PullRequest
0 голосов
/ 04 марта 2019

У нас есть настольное приложение Qt, C ++, и мы используем файловые потоки (https://docs.microsoft.com/en-us/windows/desktop/FileIO/file-streams) для записи метаданных файла.

Мы используем следующий код для доступа к файловому потоку:

HANDLE hStream;
QString localFilePath = physicalFilePath + ":AppData:$DATA"
hStream = CreateFile(localFilePath.toStdWString().c_str(),
        GENERIC_READ,
        FILE_SHARE_READ,
        NULL,
        OPEN_EXISTING,
        0,
        NULL);

Это прекрасно работает, когда мы работаем с папками на одном и том же компьютере, но когда наш «PhysicalFilePath» имеет сетевую папку, т.е. \ nas \ Test \ TestFile.docx, CreateFile возвращает код ошибки 2, т. Е. ERROR_FILE_NOT_FOUND. Я даже пытался определитьИмя устройства MS-DOS, поэтому попытался

TCHAR szDriveLetter = L”G:”;
TCHAR pszNTDevice = L”\\nas\Test\TestFile.docx”;
DWORD fResult = DefineDosDevice(DDD_RAW_TARGET_PATH | DDD_NO_BROADCAST_SYSTEM, szDriveLetter, pszNTDevice);

Возвращает 1 или ненулевое значение, т.е. успех, но когда я использую

std::wstring localFilePath = L"G:\\Test.txt:AdoddleData:$DATA";
HANDLE hStream = CreateFile(localFilePath.c_str(),
                GENERIC_WRITE,
                FILE_SHARE_WRITE,
                NULL,
                OPEN_ALWAYS,
                0,
                NULL);

    if (hStream == INVALID_HANDLE_VALUE)
    {
            DWORD err = GetLastError();
            CloseHandle(hStream);
    }

Возвращает код ошибки 123, ERROR_INVALID_NAME?

Подскажите, пожалуйста, как мне создать поток файлов для файла в сетевой папке.

...