fstream无法在树莓派上写入/打开文件

时间:2019-03-04 12:13:00

标签: c++ raspberry-pi3 fstream

我正在尝试在树莓派3 b +(从“ pi”用户处)上运行cpp程序,但是当我尝试使用“ fstream”库打开文件时,它不起作用。 我正在使用以下代码(来自main):

std::ios::sync_with_stdio(false);
std::string path = "/NbData";
std::ofstream nbData(path);
if (!nbData) {
    std::cout << "Error during process...";
    return 0;
}
nbData.seekp(std::ios::beg);

程序始终在那里失败并停止,因为没有创建文件(我没有收到致命错误,但是测试失败,并且它输出“过程中错误”,这意味着没有创建文件)。
我正在使用以下命令进行编译(编译时没有问题):

g++ -std=c++0x nbFinder.cpp -o nbFinder

我已经在Xcode上尝试了我的程序,并且一切运行正常...

1 个答案:

答案 0 :(得分:0)

问题在于您的路径。您必须放置文件,仅使用路径,如果路径不存在,将引发错误。在您的情况下,您仅使用std::string path = "/NbData";,即您的路径不是文件。 为了能够打开文件,您需要确保您的路径存在。尝试使用下面的代码,他将检查路径是否存在(如果不创建),然后尝试打开您的文件。

#include <iostream>
#include <fstream>
#include <sys/types.h>
#include <sys/stat.h>

int main() {

    std::ios::sync_with_stdio(false);
    std::string path = "./test_dir/";
    std::string file = "test.txt";

    // Will check if thie file exist, if not will creat
    struct stat info;
    if (stat(path.c_str(), &info) != 0) {
        std::cout << "cannot access " << path << std::endl;
        system(("mkdir " + path).c_str());
    } else if(info.st_mode & S_IFDIR) {
        std::cout << "is a directory" << path << std::endl;
    } else {
        std::cout << "is no directory" << path << std::endl;
        system(("mkdir " + path).c_str());
    }

    std::ofstream nbData(path + file);
    if (!nbData) {
        std::cout << "Error during process...";
        return 0;
    }
    nbData.seekp(std::ios::beg);

    return 0;
}