2016-03-05 1664 views
-1

我无法读取'.dat'文件。我已经厌倦了所有可能的方式,并厌倦了使用它,但我找不到解决方案。它给我的是一个整数的空值和一个字符串变量或字符的垃圾值。这是我写的在C++中读取.dat文件

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

+0

你需要提供的data1.dat – gauteh

+0

文件格式的几行不会被扩展定义,以雪上加霜,延长'。dat'被用作通用任意自定义二进制格式的全部功能。我们不知道如何解析文件,因为我们不知道它是由什么构成的。你将不得不提供它的规范,但我怀疑,如果你只是自己阅读它,你可能是解决问题的最大方法。 –

+1

'.dat'没有像xml这样的标准文件格式,它只是意味着“数据” - 对于任何类型的数据和二进制文件都是一种常见的类型。不知道文件是如何创建的,没有(简单的)方法来找出如何读取它 – Felix

回答

-5

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

+2

_“你将无法读取.dat文件”_是真的,这样的文件不存在。 _“他们是一般格式”_一点都不。 _“除非你知道内容”_是的,这是一个问题。 _“你将永远得到垃圾”_所谓的“垃圾”来自读取未初始化的变量,因为OP没有对这些I/O操作执行任何错误检查。这个答案不是非常有用,我很害怕! –

+0

“你将无法读取.dat文件并且!!!!了解它们” –

1

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

以下编译(不使用“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

我的系统:Ubuntu 15.10(64),g ++ v5.2.1,在较旧的Dell hw上。注意:'系统(“暂停”)'不需要。 –

+0

我得到了解决方案。 –

-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

+0

你在用于打开文件的fstream模式中有错误。 –

+0

此外,将ValueGet指针转换为char *的部分没有意义。你为什么不把它读入数组? –

+0

我说这段代码适合我,你怎么能说我在fstream有一个错误,这是我的任务的一部分。所以我被要求不要使用数组 –