C++ CreateFile 无法读取文件 ERROR_ACCESS_DENIED

标签 c++ file

<分区>

我正在尝试读取文件内容,但尽管它能够写入同一文件。我无法从中读取!该程序以 Adminstator 身份运行。

我已尝试授予“FILE_SHARE_WRITE | FILE_SHARE_READ”权限,但仍然无效。

DWORD   dwBytesWritten = 0;
unsigned long BytesRead = 0;
HANDLE hFile = INVALID_HANDLE_VALUE;
wchar_t text_file[MAX_PATH] = { 0 };


TCHAR *save_text(void) {
    OPENFILENAME    ofn = { 0 };
    TCHAR filename[512] = _T("C://Windows/EXAMPLE.txt");

    ofn.lStructSize = sizeof(ofn);
    ofn.lpstrFilter = L"Txt files (*.txt)\0*.txt\0All Files\0*.*\0";
    ofn.lpstrFile = filename;
    ofn.nMaxFile = sizeof(filename);
    ofn.Flags = OFN_NONETWORKBUTTON | OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_LONGNAMES | OFN_EXPLORER | OFN_HIDEREADONLY;
    ofn.nFilterIndex = 1;


    return(filename);
}




void WriteToFile(TCHAR *wText)
{

    wchar_t loginchar[1000];

    hFile = CreateFile(text_file, FILE_APPEND_DATA, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_HIDDEN, NULL);

    WriteFile(hFile, wText, wcslen(wText) * sizeof(wchar_t), &dwBytesWritten, NULL); // its writing without problem
    ReadFile(hFile, loginchar, wcslen(loginchar) * sizeof(wchar_t), &BytesRead, NULL); // accses denied

    ResultInFile(GetLastError()); // ResultInFile funcitons writes paramater to the file 
    //ResultInFile(BytesRead); // to see how many bytes read, but of course doesnt work..
    CloseHandle(hFile);
}

// this is the how file created at main function : 
hFile = CreateFile(txt_file, FILE_APPEND_DATA, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_HIDDEN, NULL);

最佳答案

尝试:

 hFile = CreateFile(text_file, FILE_APPEND_DATA | FILE_READ_DATA, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_HIDDEN, NULL);

代替:

 hFile = CreateFile(text_file, FILE_APPEND_DATA, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_HIDDEN, NULL);

请注意,FILE_SHARE_READ 允许 CreateFile 的其他调用请求读取权限,它不会影响您的文件句柄的读取权限。

关于C++ CreateFile 无法读取文件 ERROR_ACCESS_DENIED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41316008/

相关文章:

c# - 带 SDK 的 Dynamics CRM 2011 附加文件

Android - 从 byte[] 数组播放 mp3

c++ - wxWidgets - 事件表与 Connect()?

C++ 函数模板问题

c++ - 在 C++ 中的外部文件中存储结构数组

Django:复制文件字段

c# - 读取和写入文件的最简单方法

java - 写入资源文件java?

c++ - 使用 Visual Studio 进行可重现的构建 - 目标文件差异

c++ - 为什么我的函数指针映射没有编译?