文件未显示在cmd提示窗口中

时间:2013-04-19 07:21:24

标签: c++ file

我对c ++很新。我现在正在为结构和物体介绍课程。我们finnaly翻过文件,我有了写一个加密文本文件的程序的想法。只是为了我自己的快乐和知识(这不是功课)。我还没有编写加密,它将是私钥,因为我被告知这是最简单的,这是我第一次尝试这样的东西。无论如何,我现在只是将代码编写为函数以确保它们正常工作,然后将它们放入类中并扩展到程序中。所以,现在我的代码将打开并写入一个文件。我想在加密之前查看我刚刚在cmd窗口中写的文件,所以我知道我可以看到之前和之后。下面是代码:

//This program will create, store and encrypt a file for sending over the inernet

#include<iostream>
#include<cstdlib>
#include<iomanip>
#include<string>
#include<fstream>
#include"fileSelect.h"

using namespace std;

void openFile(fstream &);
void readFile(fstream &);

int main() {
    //output file stream
    fstream outputStream;
    fstream inputStream;
    string fileName, line;

    openFile(outputStream);
    readFile(inputStream);

    system("pause");
    return 0;
}
//open file Def
void openFile(fstream &fout){
    string fileName;
    char ch;
    cout<<"Enter the name of the file to open: ";
    getline(cin, fileName);
    //try to open the file for writing
    fout.open(fileName.c_str(),ios::out);
    if(fout.fail()){
        cout<<"File, "<<fileName<<" failed to open.\n";
        exit(1);
    }
    cout<<"Enter your message to encrypt. End message with '&':\n";
    cin.get(ch);
    while(ch!='.'){
        fout.put(ch);
        cin.get(ch);
    }
    fout.close();
    return;
}

void readFile(fstream &fin){
    string fileName, line;
    cout<<endl;
    cout<<"Enter the name of the file to open: ";
    getline(cin, fileName);
    //check file is good
    if(fin.fail()){
        cout<<"File "<<fileName<<" failed to open.\n";
        exit(1);
    }

    cout<<"Opening "<<"'"<<fileName<<"'" <<endl;
    //cout<<"Enter the file to open: ";
    //cin>>fileName;
    fin.open(fileName.c_str(),ios::in);
    //readFile(inputStream);
    if(fin){
        //read in data
        getline(fin,line);
        while(fin){
            cout<<line<<endl;
            getline(fin,line);
        }

        fin.close();
    }
    else{
        cout<<"Error displaying file.\n";
    }

    return ;
}

这将编译并运行。如果注释掉openFile()并且自己调用readFile()函数,则该文件将读取openFile()中写入的内容。它就像我想要的那样一个接一个地做。它可能只是一个我想念的简单修复,但它现在变得有点头疼。任何帮助都会被贬低。 谢谢。

1 个答案:

答案 0 :(得分:1)

当您阅读要加密的邮件时,您不会使用换行符。换行符仍保留在输入缓冲区中,并会导致getline(cin, fileName);读取空fileName

阅读完消息后,您必须先跳过换行符

string tmp;
getline(cin, tmp);

然后getline()中的readFile将正常运作。

OT

  • 您的提示说

    cout<<"Enter your message to encrypt. End message with '&':\n";
    

    但您要测试的是.而不是&

    while(ch!='.'){
    
  • 您将fstream传递给openFilereadFile,但打开并关闭这些功能中的文件。您可以改用局部变量。

    而不是

    void openFile(fstream &fout){
        ...
        fout.open(fileName.c_str(),ios::out);
    
    你写了

    void openFile(){
        ...
        fstream fout;
        fout.open(fileName.c_str(),ios::out);
    

    甚至更短

    void openFile(){
        ...
        ofstream fout(fileName.c_str());
    

    此外,您必须更改openFile()的声明和电话。

    readFilefin / ifstream正常工作。