无法在 Windows 中以编程方式 (C++) 从其他用户帐户读取文件

Posted

技术标签:

【中文标题】无法在 Windows 中以编程方式 (C++) 从其他用户帐户读取文件【英文标题】:Unable to read file from other user account programmatically (C++) in Windows 【发布时间】:2012-06-28 14:30:42 【问题描述】:

我使用以下功能在 Windows 的一个用户帐户中创建了一个包含一些日志的文本文件:

WORD wBOM = 0xFEFF;

    HANDLE hFile = ::CreateFileW(filePath, GENERIC_WRITE, 0, NULL,CREATE_NEW,FILE_ATTRIBUTE_NORMAL, NULL);

            ::WriteFile(hFile, &wBOM, sizeof(WORD), &NumberOfBytesWritten, NULL);
            ::CloseHandle(hFile); 

现在,当我以编程方式从其他用户帐户读取此文件时,我无法打开文件并读取其内容。

我正在使用以下功能从其他用户帐户读取数据。

CFile file;
        CFileException *exp = NULL;
        if(!file.Open( logAppExecPath,CFile::modeReadWrite | CFile::shareDenyNone,exp))
        

        if(exp != NULL)
        
            TCHAR ErrorMsg[MAX_PATH];
            exp->GetErrorMessage(ErrorMsg,MAX_PATH);
            AfxMessageBox(L"XML Creation while AppExecLogs : "+ CString(ErrorMsg));
            exp->Delete();

        
        

但是,每当我从同一个用户帐户读取时,上述功能都可以正常工作并正确打开和读取文件。

两个用户帐户都是管理员帐户。

总之,以编程方式在一个用户帐户中写入文件并从其他用户帐户读取会出现“文件不存在”的异常......但事实是文件存在,我可以使用单击手动打开该文件。

【问题讨论】:

你确定你有它的权利吗?因为听起来好像你没有。 你好@RedX ...感谢您的回复...事实上我又做了一项测试,我在有限帐户中创建了文件并尝试在管理员帐户中读取它...但这次也它失败了......但在有限帐户中,我可以使用 CFile() 打开文件 @JoãoAugusto :文件路径为:C:\ProgramData\Limited_User\logs.txt 【参考方案1】:

默认情况下,用户的个人资料只有该用户可以访问。此外,Windows 没有标准方式来访问任何其他用户的配置文件。

您最好的选择是使用公共/共享位置,在C:\ProgramData\(根据需要设置权限)或公共文档文件夹中。取决于文件是什么。

【讨论】:

以上是关于无法在 Windows 中以编程方式 (C++) 从其他用户帐户读取文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 Qt 在 Windows 中以编程方式更改网络适配器名称

在 C++ 中以编程方式在编译时创建静态数组

使用 ioctl 在 C++ 中以编程方式添加路由

在 C++ 程序中以编程方式检测字节顺序

当某个条件为真时,如何在 Eclipse 中以编程方式设置 C++ 断点?

在 Windows 中以编程方式确定电源使用情况?