У нас есть настольное приложение 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?
Подскажите, пожалуйста, как мне создать поток файлов для файла в сетевой папке.