使用流写入文件

问题描述:

我应该在名为“mydata.txt”的文件内打印(x,y)值。但出于某种原因,我收到以下错误消息:“错误:无法打开输出文件mydata.txt”我不确定程序是否应该创建文本文件,或者我应该创建该文件。我试过后者,但它仍然无法工作。这里是我的代码:使用流写入文件

#include "std_lib_facilities_5.h" 

class Point{ 
    public: 

    int x; 
    int y; 

    // Coordinate members x and y 
    Point(int nn = 0 , int mm = 0): x(nn), y(mm){} 
    friend ostream& operator<< (ostream &out, const Point &point); 
}; 

ostream& operator<<(ostream& os, const Point& point){ 
    os << point.x << " " << point.y; 
    return os; 
} 

int main() 
try { 
    int x1, x2; 
    vector<Point> original_points; 

    for(int i = 0; i < 7; ++i) { 
     cout << "Please input coordinate points as (x,y): "; 
     cin >> x1 >> x2; 
     original_points.push_back(Point(x1,x2)); 
    } 
    for(int i = 0; i < 7; ++i){ 
     cout << "Original points: " << original_points[i] << endl; 
    } 
    string outputFile = "mydata.txt"; 
    ofstream ost {"mydata.txt"}; 
    ost.open(outputFile,ofstream::out); 
    if(!ost) error("can't open output file ", outputFile); 

    for(int i = 0; i < original_points.size(); ++i){ 
     ost << original_points[i] << " " << original_points[i]; 
    } 
    ost.close(); 
} 
catch (exception& e) { 
    cerr << "error: " <<e.what() << '\n'; 
    return 1; 
    } 
    catch (...) { 
     cerr << "Oops: unknown exception!\n"; 
     return 2; 
    } 

这里是输出,当我运行它:

Please input coordinate points as (x,y): 1 2 
Please input coordinate points as (x,y): 1 1 
Please input coordinate points as (x,y): 2 2 
Please input coordinate points as (x,y): 3 3 
Please input coordinate points as (x,y): 4 4 
Please input coordinate points as (x,y): 5 5 
Please input coordinate points as (x,y): 6 6 
Original points: 1 2 
Original points: 1 1 
Original points: 2 2 
Original points: 3 3 
Original points: 4 4 
Original points: 5 5 
Original points: 6 6 
error: can't open output file mydata.txt 
Program ended with exit code: 1 
+0

是的,我做到了。我创建了一个名为“mydata.txt”的文件,并将它放在同一个文件夹中 –

+0

@ scohe001除非另有指定,否则打开输出文件流将创建该文件。 – molbdnilo

试试这个

#include "std_lib_facilities_5.h" 

class Point{ 
    public: 

    int x; 
    int y; 

    // Coordinate members x and y 
    Point(int nn = 0 , int mm = 0): x(nn), y(mm){} 
    friend ostream& operator<< (ostream &out, const Point &point); 
}; 

ostream& operator<<(ostream& os, const Point& point){ 
    os << point.x << " " << point.y; 
    return os; 
} 

int main() 
try { 
    int x1, x2; 
    vector<Point> original_points; 

    for(int i = 0; i < 7; ++i) { 
     cout << "Please input coordinate points as (x,y): "; 
     cin >> x1 >> x2; 
     original_points.push_back(Point(x1,x2)); 
    } 
    for(int i = 0; i < 7; ++i){ 
     cout << "Original points: " << original_points[i] << endl; 
    } 
    ofstream ost; 
    ost.open("mydata.txt"); 

    if(!ost) error("can't open output file ", "mydata.txt"); 

    for(int i = 0; i < original_points.size(); ++i){ 
     ost << original_points[i] << " " << original_points[i]; 
    } 
    ost.close(); 
} 
catch (exception& e) { 
    cerr << "error: " <<e.what() << '\n'; 
    return 1; 
    } 
    catch (...) { 
     cerr << "Oops: unknown exception!\n"; 
     return 2; 
    } 
+0

我们是否应该猜测其中的差异,或者可以解释一下你所做的改变? –

+0

没有错误,但它不创建文件。 –

+0

尝试执行打开文件并向其写入虚拟消息的代码。然后关闭文件。 – Chris

ofstream ost {"mydata.txt"};打开该文件。

然后,您尝试在下一行中再次打开它失败,因为它已经打开。
删除第二行。

删除行ost.close();当你在它的时候 - 析构函数会在你的时间关闭它。

+0

它还没有创建文件。我应该把它放在同一个目录 –

+0

@PapesTraore你知道吗?因为你的程序打印出错误或者你找不到它?该文件应该在程序的*工作目录*中创建,并且如果您使用的是通常不在源代码所在的IDE。 – molbdnilo

+0

我找不到它,你的意思是.cpp文件?我使用的是Xcode,但是我的作业里面有一个文件夹。 –