Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c+中读取二进制文件有困难+; 我有一个VisualC++项目名为“强>搜索元素< /强>,其中有一个类叫做周期表< /Stand >,并且我有另一个VisualC++项目,叫做“强>写元素< /强>,在这个类中有相同的类,它的描述(变量名和大小)也一样…_C++_Binaryfiles - Fatal编程技术网

在c+中读取二进制文件有困难+; 我有一个VisualC++项目名为“强>搜索元素< /强>,其中有一个类叫做周期表< /Stand >,并且我有另一个VisualC++项目,叫做“强>写元素< /强>,在这个类中有相同的类,它的描述(变量名和大小)也一样…

在c+中读取二进制文件有困难+; 我有一个VisualC++项目名为“强>搜索元素< /强>,其中有一个类叫做周期表< /Stand >,并且我有另一个VisualC++项目,叫做“强>写元素< /强>,在这个类中有相同的类,它的描述(变量名和大小)也一样…,c++,binaryfiles,C++,Binaryfiles,我使用Write Elements项目将类周期表的对象写入名为PeriodicTable.dat的二进制文件,但每当我将二进制文件与我的搜索元素项目一起使用时(基本上只是将粘贴从Write Elements复制到搜索元素)那么输出是意外的(包含垃圾值) 在我看来,该文件应该与这两个项目一起使用,因为这两个项目都包含相同的类描述。但我不知道问题出在哪里 编写元素代码: #包括 #包括 使用名称空间std; 类周期表 { 字符名称[15],符号[3],块,状态[10],颜色[15],分类[20];

我使用Write Elements项目将类周期表的对象写入名为PeriodicTable.dat的二进制文件,但每当我将二进制文件与我的搜索元素项目一起使用时(基本上只是将粘贴从Write Elements复制到搜索元素)那么输出是意外的(包含垃圾值)

在我看来,该文件应该与这两个项目一起使用,因为这两个项目都包含相同的类描述。但我不知道问题出在哪里

编写元素代码:

#包括
#包括
使用名称空间std;
类周期表
{
字符名称[15],符号[3],块,状态[10],颜色[15],分类[20];
int GroupNo、AtomicNo、periodino;
浮重;
公众:
void GetInfo();
};
int main()
{
周期性耳垂;
流文件输出;
fileout.open(“PeriodicTable.dat”,ios::binary | ios::app);
系统(“cls”);
ptele.GetInfo();
write((char*)&ptele,sizeof(ptele));
fileout.close();
返回0;
}
void PeriodicTable::GetInfo()
{
姓名;
cout>符号;
块;
cout>状态;
颜色;
cout>分类;
cout>GroupNo;
cout>AtomicNo;
cout>no;
重量;
}

我认为您没有正确使用VS项目结构。乍一看,您的简单解决方案应该包含一个包含一个类(PeriodicTable)的项目,该类应该有几个方法,例如searchElements、writeElements、readElements等。这种方法有什么问题?如果,出于某种原因,你不能使用这种方法,那么我认为你应该更好地解释你的问题,你正试图实现什么

您没有正确执行类抽象。还有,所有的东西都在同一个文件里?包括类定义?这不是使用VS项目结构的方式

我假设您想要创建两个独立的应用程序。一个将创建周期表,第二个应用程序使用第一个应用程序生成的文件

如果以上是正确的,您需要在header中声明PeriodicTable类,在.cpp实现中实现构造函数、析构函数和GetInfo方法。另一个.cpp实现应该包含第一个应用程序的main()函数

请注意,通常最好由两个包含全局定义的应用程序在共享位置创建一个通用头文件,如生成的.dat文件的路径。在这种情况下,应采用绝对路径,因为两个应用程序不太可能具有相同的文件相对路径


另一件需要注意的事情是,不要让编译器知道应该如何构造文件,而是自己构造它。遵循在两个应用程序中创建的结构约定。一个建议是,不要写
(char*)&ptele
,而是为一个元素写一行,在每列之间,比如在元素和符号之间,提供一个制表符。在使用该值之前,您需要对其进行正确的解析,但这样可以避免数据的任何歧义。

对于我来说,它非常适合以下读取代码:

int Read()
{
    ifstream file;
    file.open("PeriodicTable.dat", ios::binary | ios::in);

    while (0 == file.rdstate())
    {
      PeriodicTable ptele;
      file.read((char *)&ptele, sizeof(ptele));
      //if (0 == file.rdstate())
      //    ptele.PrintInfo();
    }
    file.close();

    return 0;
}

您能否提供
WriteElements
代码示例?另外,Visual studio暗示windows-您使用什么来执行文件读/写操作?例如,如果使用FOpenT,则必须特别小心,这样它就不会在错误的时刻尝试转换行结束。这是我第一次看到具有这样命名约定的VisualC++项目。这是。。。令人不安…当你有。。。json?json??我不明白你说的话!!好的,看!!对不起,如果我是粗鲁的。。。但是我想使用我使用Write Elements项目创建的二进制文件,并将其与具有相同类描述的Search Elements项目一起使用……我回复了您的第一个版本,其中您甚至没有提供代码,因此我在尝试了解您想要做什么时感到非常困惑。看到周围的其他评论,我显然不是唯一一个。如果你想得到答案,你需要先发布一个好问题。对你没有预料到的答案表现出粗鲁或紧张是没有帮助的。
int Read()
{
    ifstream file;
    file.open("PeriodicTable.dat", ios::binary | ios::in);

    while (0 == file.rdstate())
    {
      PeriodicTable ptele;
      file.read((char *)&ptele, sizeof(ptele));
      //if (0 == file.rdstate())
      //    ptele.PrintInfo();
    }
    file.close();

    return 0;
}