C ++为什么我的示例程序不会创建输出文件?

时间:2010-09-12 20:01:09

标签: c++ filestream

我正在编写一个小型/ beta测试程序,该程序将用于我更大的项目程序中。它向用户请求输入文件名(IE data.txt)并创建名为filename.out(IE data.out)的输出文件。我尝试了一个简单的outFile<< “在这打字”;尝试一下,但它不会创建输出文件。我确定我在这里搞砸了一些简单的东西,但我无法弄清楚是什么。

#include <fstream>
#include <iostream>
#include <string>
using namespace std;

//Global variables 
ifstream inFile;
ofstream outFile;


void main()
{
// Requests user for input filename
string inputFile;           
cout << "Enter File Name: ";
cin >> inputFile;
string outputFile = inputFile.substr(0, inputFile.find_last_of('.')) + ".out";
// Opens both inputFile and outputFile
inFile.open(inputFile.c_str(), ios::in);
outFile.open(outputFile.c_str(), ios::in);
// Checks for input file
if (!inFile)
 {
      cout << "Unable to open file" << endl;
      exit(1);
 }

outFile << "Hello world!";

inFile.close();
outFile.close();
}

2 个答案:

答案 0 :(得分:9)

因为您正在尝试打开文件进行阅读:

outFile.open(outputFile.c_str(), ios::in);

改为使用ios::out

答案 1 :(得分:3)

  1. 为什么要将这些流设为全局变量而不是本地变量?在C ++中,通常首选尽可能晚地构造对象。如果这样做,您可以使用所有信息在构造函数中打开流,这可以采用与open()成员函数相同的参数。

  2. std::ifstreamstd::ofstream之间的一个区别是他们的open()成员函数和构造函数应用了不同的默认打开模式。 instd::ifstreamoutstd::ofstream。你总是可以覆盖这些,但这在一定程度上会破坏使用这些流的原因。您也可以使用std::fstream。为此,您始终必须提供打开模式。如果您使用的是std::ifstreamstd::ofstream,请跳过打开模式。下面是使用构造函数而不是open()成员函数时的外观(它与后者看起来几乎相同):

    std::ifstream inFile(inputFile.c_str());
    std::ofstream outFile(outputFile.c_str());
    
  3. 它是int main(),即使某些编译器允许void

  4. I have strong objections to using directives。但是这些反对意见并没有像本答复中列出的其他意见那样广泛分享。