首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ofstream将错误的东西写入文件

Ofstream将错误的东西写入文件
EN

Stack Overflow用户
提问于 2010-01-17 21:11:53
回答 2查看 793关注 0票数 2

嘿,伙计们,我真的想不出标题里的这个错误是什么,就这样吧。

我正在开始一项任务,在那里我必须读取文件的内容,执行一些计算,并将内容+新的计算写入文件。

我编写了在文件中读取的代码,并立即将其写入输出文件,以测试读取是否正确。当我这样做时,我看到流将我的“文件名”字符串(用于向用户询问要打开的文件的名称)随机地写入文件中,代码中没有提到它。

这是我的代码:

代码语言:javascript
复制
   #include <string>
    #include <fstream>
    #include <vector>
    #include <iostream>
    using namespace std;

    int main()  
    {
     char filename[256] = "";
     char currentLine[256] = ""; 

     cout << "Please enter the name of the input file: " << endl;
     cin.getline(filename,256);

     vector <string> storage;//disregard for now

     ifstream infile;
     infile.open(filename);

     string outputFile = ".output";
     outputFile = filename + outputFile;

     ofstream outfile(outputFile.c_str());

     string line = "";
     while(!infile.eof())
     {
      infile.read(currentLine, 256);
      line = currentLine;
      storage.push_back(line); //disregard for now
      outfile << line; //testing to see if it read properly
     }
    } 

以下是输入的文本:

1034蓝色电动浮雕机5 1026

1039绿色电动浮筒10 1026

1054蓝色电除尘器(镁涂层)7 2000

1069 JELLO锤子V2 111 12

1050钟消声器0 50

1090蛇油34 150

1070 MECHAGODZILLA服装(粉红)1500

1090 REFROBULATOR 3 9999

1091 REFROBULATOR灌装(5包)1 4999

1092 REFROBULATOR灌装(10包)1 8999

二零零三年财务今日(三月)4 5

今日(APR) 9 5

二00五年五月二日

3102 FROBULATOR客户保修2年3 199

3103 FROBULATOR客户保修3YR 3 299

这是输出文本:

1034蓝色电动浮雕机5 1026 1039绿色电动浮筒10 1026 1054蓝色电除尘器(镁涂层)7 2000 1069 JELLO锤子V2 111 12 1050钟消声器0 50 1090蛇油34 150 1070 MECHAGODZILLA服装(粉红)1500 1090 Rinvoice.txtEFROBULATOR 3 9999 1091 REFROBULATOR灌装(5包)1 4999 1092 REFROBULATOR灌装(10包)1 8999 二零零三年财务今日(三月)4 5 今日(APR) 9 5 二00五年五月二日 3102 FROBULATOR客户保修2年3 199 3103 invoice.txtFROBULATOR客户保修3YR 3299 填(5包)1 4999 1092 REFROBULATOR灌装(10包)1 8999 二零零三年财务今日(三月)4 5 今日(APR) 9 5 二00五年五月二日 3102 FROBULATOR客户保修2年3 199 3103 invoice.txt

如您所见,"invoice.txt“不应该出现在输出中。现在我错过了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-01-17 21:14:52

逐行读取文件的正确方法是:

代码语言:javascript
复制
string line;
while( getline( file, line ) ) {
   // do something with line
}

关于为什么会这样,您可能想看看我的这篇博客文章

票数 3
EN

Stack Overflow用户

发布于 2010-01-17 21:18:27

我想你的问题是:

代码语言:javascript
复制
infile.read(currentLine, 256);

因为我注意到朗读

是一个未格式化的输入函数,所提取的内容不作为c-字符串格式存储,因此在字符序列的末尾追加无结束空字符。

所以当你去复制currentLine的时候,拷贝就会从末端走到内存中的任何东西,也就是filename

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2082664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档