在循环中写入文件时出现问题

时间:2015-10-09 01:56:04

标签: c++

这里我有两段C ++代码应该写入文件中的一些数据。第一个是下面的,它的工作原理:

void ParameterManager::Save()
{
    std::ofstream saveFile;
    saveFile.open(path, std::ios::trunc | std::ios::out);
    if (saveFile.is_open())
    {
        saveFile << "File opened. Begin saving.\n";
        for (int i = 0; i < 4; ++i)
        {
            saveFile << "Hoppa" << std::endl;
        }
     }
     saveFile.close();
}

输出文件中的结果是:

File opened. Begin saving.
Hoppa
Hoppa
Hoppa
Hoppa

与预期一样。 第二个是下面的,它不起作用:

void ParameterManager::Save()
{
    std::ofstream saveFile;
    saveFile.open(path, std::ios::trunc | std::ios::out);
    if (saveFile.is_open())
    {
        saveFile << "File opened. Begin saving.\n";
        for (auto item : map)
        {
            std::cout << "Hoppa" << std::endl;
            saveFile << "Hoppa" << std::endl;
        }
     }
     saveFile.close();
}

其中map是包含4个条目的哈希映射,并且它是实现Save函数的类的成员。输出文件中的结果是:

File opened. Begin saving.

Hoppa线在终端上打印但从未写入文件。我在调试模式下验证并执行写入4次,但内容未写入文件。  我在虚拟机windows 7 pro上测试它。主机是MacBookPro。我使用Visual Studio 2013 Pro。 你可以帮助我理解为什么第二版代码不能像预期的那样工作。 非常感谢你们所有人。

2 个答案:

答案 0 :(得分:2)

Welp,我不知道,但是当我使用std::map<int, int>并输入4 std::pair<int, int>并使用相同的for循环时它会起作用:

http://coliru.stacked-crooked.com/a/e694252e96aebab5

#include <iostream>
#include <fstream>
#include <string>
#include <map>

void save()
{
    std::map<int, int> mappa;

    for (size_t i = 0; i < 4; ++i) {
        mappa.insert(mappa.begin(), std::pair<int, int>(i,i));   
    }

    std::ofstream saveFile;
    saveFile.open("test.txt", std::ios::trunc | std::ios::out);
    if (saveFile.is_open())
    {
        saveFile << "File opened. Begin saving.\n";
        for (auto it : mappa)
        {
            saveFile << "Hoppa" << std::endl;
            std::cout << "PRINTED LINE" << std::endl;
        }
     }
     saveFile.close();
}

int main() {
    save();
}

答案 1 :(得分:0)

你可以尝试:

for (auto &item : map)
    {
        std::cout << item << std::endl;
        saveFile << "Hoppa" << std::endl;
    }