Windows:确保文件已写入物理磁盘 我写了一个C++代码,它写到文件并试图将它冲向物理磁盘。在代码结束时,我想确定文件是否已写入物理磁盘,并确认即使有人拔下机器,我仍处于稳定状态。然而,当我在执行以下所有行之后立即拔掉电源插头时,文件丢失,即,尽管我尝试通过刷新并使用了文件标志(file FLAG)写入(WRITE)功能,但文件尚未写入物理磁盘 HANDLE hFile = CreateFileA( filePath.c_str(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL| FILE_FLAG_WRITE_THROUGH , NULL); if (hFile == INVALID_HANDLE_VALUE) { throw MyException("CreateFile failed"); } DWORD bytesWritten = 0; auto errorFlag = WriteFile( hFile, data.data(), static_cast<DWORD>(data.size()), &bytesWritten, NULL); if (bytesWritten != data.size() || errorFlag != TRUE) { CloseHandle(hFile); throw MyException("WriteFile failed" + std::to_string(GetLastError())); } auto ret = FlushFileBuffers(hFile); if (!ret) { CloseHandle(hFile); throw MyException("FlushFileBuffers failed"); } CloseHandle(hFile); // The file isn't written to the disk yet!!! HANDLE hFile=CreateFileA( filePath.c_str(), 你写什么, 0, 无效的 永远创造你, 文件属性正常文件标志写入, 无效); if(hFile==无效的句柄值) { 抛出MyException(“CreateFile失败”); } DWORD字节数=0; 自动错误标志=写入文件( hFile, data.data(), 静态_cast(data.size()), &BytesWrited, 无效); if(bytesWrited!=data.size()| | errorFlag!=TRUE) { 闭合手柄(hFile); 抛出MyException(“WriteFile失败”+std::to_字符串(GetLastError()); } auto ret=刷新文件缓冲区(hFile); 如果(!ret) { 闭合手柄(hFile); 抛出MyException(“FlushFileBuffers失败”); } 闭合手柄(hFile); //文件尚未写入磁盘!!!

Windows:确保文件已写入物理磁盘 我写了一个C++代码,它写到文件并试图将它冲向物理磁盘。在代码结束时,我想确定文件是否已写入物理磁盘,并确认即使有人拔下机器,我仍处于稳定状态。然而,当我在执行以下所有行之后立即拔掉电源插头时,文件丢失,即,尽管我尝试通过刷新并使用了文件标志(file FLAG)写入(WRITE)功能,但文件尚未写入物理磁盘 HANDLE hFile = CreateFileA( filePath.c_str(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL| FILE_FLAG_WRITE_THROUGH , NULL); if (hFile == INVALID_HANDLE_VALUE) { throw MyException("CreateFile failed"); } DWORD bytesWritten = 0; auto errorFlag = WriteFile( hFile, data.data(), static_cast<DWORD>(data.size()), &bytesWritten, NULL); if (bytesWritten != data.size() || errorFlag != TRUE) { CloseHandle(hFile); throw MyException("WriteFile failed" + std::to_string(GetLastError())); } auto ret = FlushFileBuffers(hFile); if (!ret) { CloseHandle(hFile); throw MyException("FlushFileBuffers failed"); } CloseHandle(hFile); // The file isn't written to the disk yet!!! HANDLE hFile=CreateFileA( filePath.c_str(), 你写什么, 0, 无效的 永远创造你, 文件属性正常文件标志写入, 无效); if(hFile==无效的句柄值) { 抛出MyException(“CreateFile失败”); } DWORD字节数=0; 自动错误标志=写入文件( hFile, data.data(), 静态_cast(data.size()), &BytesWrited, 无效); if(bytesWrited!=data.size()| | errorFlag!=TRUE) { 闭合手柄(hFile); 抛出MyException(“WriteFile失败”+std::to_字符串(GetLastError()); } auto ret=刷新文件缓冲区(hFile); 如果(!ret) { 闭合手柄(hFile); 抛出MyException(“FlushFileBuffers失败”); } 闭合手柄(hFile); //文件尚未写入磁盘!!!,c++,windows,file,winapi,disk,C++,Windows,File,Winapi,Disk,如何确保文件已在磁盘上,以便提交更改?这就是调用FlushFileBuffers()的要点。如果没有发生这种情况,则从禁用反恶意软件开始。下一步,仔细查看文件系统和磁盘驱动程序,可能需要故意禁用磁盘本身的写缓存。属于serverfault。comI以前见过这个问题,只是本地硬盘,没有什么像网络文件服务器那样“异国情调”。我怀疑某些磁盘硬件是“真实经济”,并在以下情况下报告提交给物理介质的数据:(您最好使用服务器质量的驱动器或SSD。驱动器属性中的开关会导致忽略文件标志\u WRITE\u to标

如何确保文件已在磁盘上,以便提交更改?

这就是调用FlushFileBuffers()的要点。如果没有发生这种情况,则从禁用反恶意软件开始。下一步,仔细查看文件系统和磁盘驱动程序,可能需要故意禁用磁盘本身的写缓存。属于serverfault。comI以前见过这个问题,只是本地硬盘,没有什么像网络文件服务器那样“异国情调”。我怀疑某些磁盘硬件是“真实经济”,并在以下情况下报告提交给物理介质的数据:(您最好使用服务器质量的驱动器或SSD。驱动器属性中的开关会导致忽略
文件标志\u WRITE\u to
标志。缓存管理器会忽略请求并立即返回呼叫,将其视为正常的延迟写入。伙计们,此代码最终将分发给客户。我不能使用整个设备的属性,或者将高质量的驱动器或SSD发送给我的所有客户。这就是调用FlushFileBuffers()的要点。如果没有发生这种情况,请从禁用反恶意软件开始。接下来,请仔细查看文件系统和磁盘驱动程序,也许您需要故意禁用磁盘本身的写缓存。属于serverfault。comI以前见过这个问题,仅是本地硬盘,没有网络文件服务器那样的“异国情调”。我怀疑某些磁盘硬件是“事实上经济的”,并在以下情况下报告提交到物理介质的数据:(您最好使用服务器质量的驱动器或SSD。驱动器属性中的开关会导致忽略
文件标志\u WRITE\u to
标志。缓存管理器会忽略请求并立即返回呼叫,将其视为正常的延迟写入。伙计们,此代码最终将分发给客户。我不能使用整个设备的属性,或将高质量驱动器或SSD发送给我的所有客户。。