用c ++读取.dat文件

时间:2016-03-05 22:49:45

标签: c++ file

我无法阅读' .dat'文件。我已经厌倦了所有可能的方式,累了谷歌搜索,但我找不到解决方案。它给我的全部是整数的空值和字符串变量或char的垃圾值。这就是我写的

ifstream file;
file.open("data1.dat"); // I have also tried this way too like file.open("data1.dat", ios::binary, ios::in);
int data=0;
file >> data;
cout << data << endl;
system("pause");
return 0;  

我正在使用visual studio来编译这段代码。我很确定指针正在进入数据文件,但我不知道数据没有被读取的原因。

.dat文件由每行的整数组成,范围从0,所以我只需要读取文件并从每行获取数字,并找到文件中所有数字的总和。该文件包含数字 5, 468, 3200, 32,等等。每个号码都在一个新行中。该文件可以包含任意数量的记录。 this how .dat file looks when opened using a notepad editor

4 个答案:

答案 0 :(得分:1)

您的代码在我的系统上“有效”。

以下编译(没有“using namespace std;”)
为方便起见,我更改了文件名。 我在代码的同一工作目录中创建了't391.dat'文件,并放入10行,每行1个值,1..9,0。

#include <fstream>
#include <iostream>

int t391a(void)
{
   std::ifstream file;
   file.open("t391.dat"); 
   int data=0;
   file >> data;
   std::cout << data << std::endl;  // echo of input / proof it works
   //system("pause");
   file.close();
   return 0;
}

此代码输出第一个值(这是它尝试做的全部),因此它正在工作!

输入的回声是个好主意。

作为一项实验,我暂时将't391.dat'文件重命名为其他内容。代码运行完成并打印单个0,文件中的第一个值。也许这表明你的文件没有找到,我猜不出来。为了确认,我恢复了文件,上面的“再次工作”。

代码中缺少项目:

  • 错误检查 - file.open()

  • 读取到文件结尾的循环

  • 错误检查 - 数据项

  • 的格式化提取(即从流中读取)
  • file.close - 可能不需要

如果您仍在使用此问题,我的代码的最小扩展版本可以解决这些问题。让我知道。

答案 1 :(得分:0)

这是我刚发现的一种方式

     #include <bits/stdc++.h>
    using namespace std;

    int main(){
        unsigned int a;
        unsigned char c;
        ifstream file;
        file.open("ou.bin", ios::binary);
        if(!file.is_open()){
            cout<<"error";
            return 0;
        }
        for(int i=0; i<8; i++){
            file>>c;
            a = c;
            a = a<<8;
            file>>c;
            a = a+ c;
            cout<<a<<endl;
        }
        file.close();
        return 0;
   }

这用于在一个数字中存储两个字节,您可以在一个数字甚至一个字节中存储多个字节。

希望这有帮助。

答案 2 :(得分:-1)

class ValueGet {
public:
   int data;
   ValueGet() {
   data = 0;
   }
};
int main()
{
    ValueGet vg;
    ifstream file;
    file.open("data1.dat", fstream::binary | fstream::out); // Opens a file in binary mode for input operations i.e., getting data from file.
    if (!file)
        cout << "File Not Found." << endl;
    else {
        file.seekg(0); // To make sure that the data is read from the starting position of the file.
        while (file.read((char *)&vg, sizeof(vg))) // Iterates through the file till the pointer reads the last line of the file.
            cout<<vg.data<<endl;
    }
    //system("pause");
    return 0;
}

output of the data in the file

答案 3 :(得分:-4)

您将无法读取.dat文件并在您的上下文中理解它们 - 它们是用于存储数据的通用格式。除非你知道它的内容或它们是如何被指定的,否则你总会得到垃圾。