ofstream (C++) 不创建文件(权限被拒绝)

JA_*_*FKH 2 c++ operating-system ofstream permission-denied chromium

我正在挖掘一个用 C++ 编写的开源项目(Chromium),我想创建一个文件并写入它。顺便说一句,我使用 Ninja 构建系统构建源代码。这是我创建文件的代码:

std::ofstream myfile;
myfile.open("collectedData.txt", std::fstream::out | std::fstream::app);
if (myfile.is_open()){
    std::cout << "file is open.\n";
    myfile << "Hello from Chrome!" ;
    myfile << "\n" ;
}else {
    std::cout << "error -> " << strerror(errno) << "\n";
    std::cout <<"file cannot be opened.\n";
}
myfile.close();
Run Code Online (Sandbox Code Playgroud)

所以问题是我得到了这个代码的权限被拒绝错误,它没有创建文件。但是,当我创建一个新项目(使用 VS2010)并将项目的 .exe 文件复制到 Chromium 的同一目录中时,代码会创建该文件。所以我认为目录权限没有问题。

另外,我查看了任务管理器,发现有几个Chrome.exe进程,所以我想可能是因为并发进程。然后我决定在关闭文件并运行并发进程(.exe)之前检查这个并将cin命令添加到上面的代码(到VS2010中的新项目)。这样,我不会关闭文件并打开它的多个实例。令人惊讶的是,所有程序都可以成功打开文件并写入文件。

我不知道要检查什么,我想知道是否有人可以帮助我。

更新: 我找到了问题,您可以在答案部分找到解决方案。

JA_*_*FKH 5

目录权限和编译器问题都没有问题。问题是 Chrome 有几个渲染器进程,这些进程是沙盒化的(与浏览器进程相反)。因此,他们没有写入文件的权限。

为了克服这个问题,使用--no-sandbox flag给渲染器进程授予文件访问权限。构建 chrome,然后使用以下代码从控制台运行它(对于 win):

chrome.exe --no-sandbox
Run Code Online (Sandbox Code Playgroud)