gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 01:04:01 25 4
gpt4 key购买 nike

我正在挖掘一个用 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();

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

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

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

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

最佳答案

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

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

chrome.exe --no-sandbox

关于c++ - ofstream (C++) 不创建文件(权限被拒绝),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24704080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com