如果断电则不完整的mkdir和copyFile

时间:2015-06-25 14:14:49

标签: c++ windows

我有一个创建目录并将文件复制到其中的应用程序。这通常很好。但是,如果窗口正确关闭并且电源丢失,则文件将无法始终可用或完整。

我的操作系统是Windows Embedded POSReady7(版本6.1 Build 7601:Service Pack 1),并且在硬盘上禁用了“写入缓存”选项。我有一个C ++应用程序。我也使用_flushall,但它没有帮助。

我已经编写了一个测试应用程序,我可以看到问题。我启动应用程序,在输出完成后等待十秒钟然后拔掉电源。重启后文件不可用。

这是我的代码:

#include "stdafx.h"
#include <iostream>
#include <direct.h>
#include <string>
#include <Windows.h>
#include <atlstr.h>
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
    string csPathName("D:\\temp\\FileCopyTest\\");
    int mkRetValue = _mkdir( csPathName.c_str() );
    cout << "Create directory " << csPathName.c_str() << " with return value " << mkRetValue << endl;
    BOOL copyRetValue = CopyFileEx( _T("D:\\temp\\test.txt"), _T("D:\\temp\\FileCopyTest\\test.txt"), nullptr, nullptr, FALSE, COPY_FILE_NO_BUFFERING );
    cout << "Copy file, return value " << copyRetValue << endl;
    int flushRetValue = _flushall();
    cout << "flush files: " << flushRetValue << endl;
    char c;
    cin >> c;
    return 0;
}

1 个答案:

答案 0 :(得分:0)

您是否尝试过将副本放入范围内?

{
CopyFileEx( _T("D:\\temp\\test.txt"), _T("D:\\temp\\FileCopyTest\\test.txt"), nullptr, nullptr, FALSE, COPY_FILE_NO_BUFFERING );
}