gpt4 book ai didi

c++ - 如何使用 CreateFile 在 UnBuffered 模式下在 Windows 中追加文件

转载 作者:行者123 更新时间:2023-11-30 01:36:16 25 4
gpt4 key购买 nike

每次调用我的函数时,它都会覆盖文件。请注意,我使用以下标志以无缓冲模式打开文件。

FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH

如果我使用简单的缓冲模式,它工作正常。

FILE_ATTRIBUTE_NORMAL

我在非缓冲模式下遇到以下错误。

** ERROR ** CreateFile failed: The parameter is incorrect.

请在下面找到代码片段。这段代码被调用了很多次。

HANDLE hFile;

LPCWSTR file_path = convertCharArrayToLPCWSTR(UNBUFFERED_FILE);

hFile = CreateFile(file_path,
FILE_APPEND_DATA,
FILE_SHARE_WRITE,
NULL,
OPEN_ALWAYS,
FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH,
NULL
);

if (hFile == INVALID_HANDLE_VALUE)
{
std::cout << "Unable to open/create file for writing" << std::endl;
PrintError(TEXT("CreateFile failed"));
}


Data *data = new Data();
DWORD dwBytesToWrite = sizeof(Data);
DWORD dwBytesWritten = 0;
BOOL bErrorFlag = FALSE;


bErrorFlag = WriteFile(
hFile, // open file handle
data, // start of data to write
dwBytesToWrite, // number of bytes to write
&dwBytesWritten, // number of bytes that were written
NULL);

if (bErrorFlag == FALSE)
{
std::cout << "Unable to write to file" << std::endl;
PrintError(TEXT("Unable to write to file"));
}

if (dwBytesToWrite != dwBytesWritten)
{
std::cout << "Error in writing: Whole data not written" << std::endl;
PrintError(TEXT("Error in writing: Whole data not written"));
}

CloseHandle(hFile);

.如果有任何替代想法,请提出建议。

最佳答案

来自 NtCreateFile

FILE_NO_INTERMEDIATE_BUFFERING

The file cannot be cached or buffered in a driver's internal buffers. This flag is incompatible with the DesiredAccess parameter's FILE_APPEND_DATA flag.

所以当你打电话的时候

CreateFile(file_path,
FILE_APPEND_DATA, // !!
FILE_SHARE_WRITE,
NULL,
OPEN_ALWAYS,
FILE_FLAG_NO_BUFFERING /*!!*/| FILE_FLAG_WRITE_THROUGH,
NULL
);

您将 FILE_FLAG_NO_BUFFERING(映射到 FILE_NO_INTERMEDIATE_BUFFERING)与 FILE_APPEND_DATA 一起使用 - 您必须得到 ERROR_INVALID_PARAMETER。你需要删除一个标志。我建议删除 FILE_FLAG_NO_BUFFERING 标志,因为使用它您只能写入扇区大小的整数。

关于c++ - 如何使用 CreateFile 在 UnBuffered 模式下在 Windows 中追加文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52492685/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com