.dat文件怎么打开 ios_ios .dat文件 - CSDN
精华内容
参与话题
  • ifstream 没有 ios::nocreate 属性

    万次阅读 2009-05-29 07:28:00
    今天在 vs2008 中运行一个小程序的时候,发现了一个小问题,ifstream 的 open 函数中不能用 ios::nocreate 属性。详细见代码: #include #include #include int main(){ using namespace std; ifstream inFile; in...

    今天在 vs2008 中运行一个小程序的时候,发现了一个小问题,ifstream 的 open 函数中不能用 ios::nocreate 属性。详细见代码:

    #include 
    #include 
    #include int main()
    {
    	using namespace std;
    	
    	ifstream inFile;
    
    	inFile.open("my.dat",ios::in | ios::nocreate);
    	if(!inFile)
    	{
    		cerr << "不能打开my.dat" << endl;
    		exit(1);
    	}
    
    	return 0;
    
    }

    出现错误:

    error C2065: “nocreate”: 未声明的标识符
    error C2065: “inFile”: 未声明的标识符

    原因:从 vs 2003 开始,微软用一个新的 iostream 替换了原来的。新包中没有 nocreate 标识符。

    原来 ifstream  中的 open 函数默认打开就是不创建文件。如果没有这个文件则打开出错,而不是创建文件。详见代码运行结果:

    #include 
    #include 
    #include int main()
    {
    	using namespace std;
    
    	ifstream inFile;
    
    	inFile.open("my.dat",ios::in);
    	if(!inFile)
    	{
    		cerr << "不能打开my.dat" << endl;
    		exit(1);
    	}
    
    	return 0;
    
    }

    运行结果:

    未命名

    展开全文
  • 资料2:ofstream之ios::ate,ios::app,ios::in,ios::out 2 学习思路 2.1 所需实现功能 实现网页1所说的写入姓名与年龄功能,但是稍作修改,分两次打开文件,第一次写入姓名,第二次写入年龄。 2.2 第一次尝试 默认 #...

    1 学习资料

    资料1:C++ 文件和流
    资料2:ofstream之ios::ate,ios::app,ios::in,ios::out

    2 学习思路

    2.1 所需实现功能

    实现网页1所说的写入姓名与年龄功能,但是稍作修改,分两次打开文件,第一次写入姓名,第二次写入年龄。

    2.2 第一次尝试 默认

    #include<fstream>
    #include<iostream>
    using namespace std;
    int main()
    {
    	char data[100];
    	
    	//第一次打开文件
    	ofstream outfile;
    	outfile.open("D:\\afile.dat");
    	cout << "Writing to the file" << endl;
    	cout << "Enter your name:";
    	cin.getline(data, 100);
    	outfile << data << endl;
    	outfile.close();
    	
    	//第二次打开文件
    	ofstream outfile2;
    	outfile2.open("D:\\afile.dat");//**待修改语句**
    	cout << "Enter your age:";
    	cin >> data;
    	outfile2 << data << endl;
    	outfile2.close();//第二次关闭文件
    	
    	return 0;
    }
    

    输入:
    Wu Mingtang
    25
    输出文件内容为:
    默认打开
    第一次打开文件写入的姓名内容没有了,说明默认方式打开会覆盖原始文件。

    2.3 第二次尝试 ios::app

    根据资料1所说,使用ios::app模式进行第二次打开,即将待修改语句改为:

    	outfile2.open("D:\\afile.dat", ios::app);
    

    运行结果为:
    打开模式为ios::app
    结果满足预期,说明ofstream对象使用ios::app模式打开文件可以在文件末尾添加新内容。

    2.4 第三次尝试 ios::ate

    根据资料1所说,ios::ate可以定位到文件末尾,是否可以直接使用该模式打开文件,直接在文件末尾添加新内容?
    代码修改为:

    	outfile2.open("D:\\afile.dat", ios::ate);
    

    输出文件为:
    ios::ate模式打开结果
    说明,以上思路行不通,ios::ate并不能直接在文件尾进行写入操作。

    2.5 第四次尝试 ios::ate|ios::in

    根据资料2所说,可以使用ios::ate|ios::in模式打开,代码修改为:

    	outfile2.open("D:\\afile.dat", ios::ate|ios::in);
    

    输出文件内容为:
    ios::ate|ios::in模式打开
    可见ios::ate|ios::in模式与ios::app模式效果一致。

    2.6 第五次尝试 0x05

    • 看到操作符“|”就很容易想到这是利用位“或”进行的计算,因此其本质应该是二进制数的“或”操作。
    • 转到ios::in的定义,其源代码为:
    	static constexpr _Openmode in = (_Openmode)0x01;
    	static constexpr _Openmode out = (_Openmode)0x02;
    	static constexpr _Openmode ate = (_Openmode)0x04;
    	static constexpr _Openmode app = (_Openmode)0x08;
    	static constexpr _Openmode trunc = (_Openmode)0x10;
    

    说明每一种模式是一个由二进制数转化为_Openmode类型的常量

    • _Openmode类型定义为为:
    	enum _Openmode
    		{	// constants for file opening options
    		_Openmask = 0xff};
    
    • open函数接收的参数就是openmode变量:
    	void open(const char *_Filename,
    		ios_base::openmode _Mode = ios_base::out,
    		int _Prot = (int)ios_base::_Openprot)
    
    • openmode类型其实就是int型
    	typedef int openmode;
    
    • 归根结底,输出模式其实就是一个int型的变量,只是被各种包装掩盖了其真实面目,因此根据ios::ate|ios::in = 0x05,可以推知将0x05作为open()函数的参数,可以得到同样的结果。
    • 修改代码为:
    	outfile2.open("D:\\afile.dat", 0x05);
    
    • 输出文件为:
      0x05
      可见结果与使用ios::app或者ios::ate|ios::in一致,上面的推论没有问题。

    小问题

    为什么枚举类型值可以和定义的不一样,基础知识有点不牢固,望各位赐教。

    	enum _Openmode
    		{	// constants for file opening options
    		_Openmask = 0xff};
    
    	static constexpr _Openmode in = (_Openmode)0x01;
    
    展开全文
  • C++二进制文件读写

    万次阅读 2009-10-21 10:24:00
    今天终于弄明白怎样使用C++读写二进制文件了。要读取文件必须包含头文件,这里包含了C++读写文件的方法。...fstream file("test.dat",ios_base::in|ios_base::out|ios_base::app);另外一种方法就是使用open

    今天终于弄明白怎样使用C++读写二进制文件了。
    要读取文件必须包含<fstream>头文件,这里包含了C++读写文件的方法。
    可以使用fstream类,这个类可以对文件进行读写操作。
    1、打开文件。
    打开文件可以有两种方式,第一种可以使用fstream类的构造函数。
    fstream file("test.dat",ios_base::in|ios_base::out|ios_base::app);
    另外一种方法就是使用open函数。
    fstream file;
    file.open("test.dat",ios_base::in|ios_base::out|ios_base::app);
    这样就可以打开一个可读写的文件了。如果文件不存在的话,就会创建一个新文件并且以读写方式打开。

    这里需要说明一点,如果文件不存在的话,open函数中第二个参数必须包含ios_base::out|ios_base::app,
    否则就不能正确创建文件。
    2、写文件。
    先进性写文件的操作否则读一个空文件是没有意义的。
    既然是写二进制文件可以向文件中写入一个整形值。写二进制字符只能使用write函数。
    但是write函数的原形是write(const char * ch, int size)。第一个参数是char *类型,所以需要把将要写入
    文件的int类型转换成char *类型。这里的转换困扰了我好几天,不过终于弄明白了。代码如下。
    int temp;
    file.write((char *)(&temp),sizeof(temp));
    3、读文件。
    可以写文件了,读文件就好办多了。读文件需要用到read函数。其参数和write大致相同,read(const char * ch, int size)。
    要把内容读到int类型变量中同样涉及到一个类型转换的问题。和写文件一样。
    int readInt;
    file.read((char *)(&readInt),sizeof(readInt));
    这样文件中的int值就读入到int型变量readInt中了。
    4、文件指针。
    在文件的读写过程中往往需要对文件进行选择性读取。所以需要进行文件指针的移动。这是需要用到seekg和seekp函数。
    在fstream类中有两个文件指针,一个是读取文件的指针,一个是写文件的指针分别用tellg和tellp文件来取得指针的位置。
    同样seekg和seekp两个函数分别是对这两个指针进行移动的函数。这两个函数的参数都是一样的。
    先对几个枚举类型进行一下说明:
    ios_base::beg ——文件开始位置
    ios_base::cur ——文件当前位置
    ios_base::end ——文件末尾位置

    下面以seekg为例说明一下指针移动的方法:
    file.seekg(3)   ——指针移动到第三个字符的位置
    file.seekg(ios_base::beg) ——指针移动到文件开头
    file.seekg(ios_base::end) ——指针移动到文件末尾
    file.seekg(-3,ios_base::cur) ——指针当前位置向前移动三个字符
    file.seekg(3,ios_base::cur) ——指针当前位置向后移动三个字符
    file.seekg(3,file.tellg()) ——指针当前位置向后移动三个字符
    file.seekg(file.tellg()+3) ——指针当前位置向后移动三个字符
    5、对文件操作完毕后别忘了关闭文件。
    file.close();

    以上5个步骤就完成了对文件的读写操作。文本文件的操作是相同的,比二进制文件还要简单。

    展开全文
  • C++读写二进制文件

    万次阅读 多人点赞 2011-04-26 19:55:00
    C++读写二进制文件,二进制文件的复制

     

     

    摘要:

    使用C++读写二进制文件,在开发中操作的比较频繁,今天有幸找到一篇文章,遂进行了一些试验,并进行了部分的总结。

     

    使用C++操作文件,是研发过程中比较频繁的,因此进行必要的总结和封装还是十分有用的。今天在网上找到一篇,遂进行了部分的试验,以记之,备后用。

     

    本文读写文件均使用文件流进行操作,主要使用的类是ifstream, ofstream, 使用时,请务必包含文件fstream。如下:

    #include <fstream>

     

     

    写二进制文件

    写二进制文件应该使用ofstream类,文件的打开模式一定要是 binary,如果传入的不是 binary, 文件将以ASCII方式打开。

     

    下面是示例代码,用于写入文件。

     

    std::ofstream fout("a.dat", std::ios::binary);

     

    int nNum = 20;

    std::string str("Hello, world");

     

    fout.write((char*)&nNum, sizeof(int));

    fout.write(str.c_str(), sizeof(char) * (str.size()));

     

    fout.close();

     

    而写文本文件则比较简单,如下:

     

    std::ofstream fout("b.dat");

     

    int nNum = 20;

    std::string str("Hello, world");

     

    fout << nNum << "," << str << std::endl;

     

    fout.close();

      

     

    读二进制文件

    读取二进制文件可以使用ifstream 类来进行,文件的打开模式一定要是 binary,如果传入的不是 binary, 文件将以ASCII方式打开。

     

    下面是示例代码:

     

    std::ifstream fin("a.dat", std::ios::binary);

     

    int nNum;

    char szBuf[256] = {0};

     

    fin.read((char*)&nNum, sizeof(int));

    fin.read(szBuf, sizeof(char) * 256);

     

    std::cout << "int = " << nNum << std::endl;

    std::cout << "str = " << szBuf << std::endl;

     

    fin.close();

     

    而读取文本文件则比较简单:

     

    std::ifstream fin("b.dat");

     

    int nNum;

    char szBuf[256] = {0};

     

    fin >> nNum >> szBuf;

     

    std::cout << "int = " << nNum << std::endl;

    std::cout << "str = " << szBuf << std::endl;

     

    fin.close();

     

    文件的打开模式

    文件操作时,如果不显示指定打开模式,文件流类将使用默认值。

    <fstream> 中定义了如下打开模式和文件属性:

     ios::app // 从后面添加

     ios::ate // 打开并找到文件尾

     ios::binary // 二进制模式I/O(与文本模式相对)

     ios::in // 只读打开

     ios::out // 写打开

     ios::trunc // 将文件截为 长度

    可以使用位操作符 OR 组合这些标志,比如

     ofstream logFile("log.dat", ios::binary | ios::app);

     

     

    二进制文件的复制

    这里我实现了一个二进制文件的复制操作,用于验证读写的正确性,示例代码如下:

     

     

    后记

    由于文本文件本质上也是磁盘上的一个个二进制编码,因此,读写二进制文件的代码同样可以读写文本文件,在文件类型不是很明确的读写操作中,直接使用二进制读写比较可取,如果可以直接判断文件类型,则可以分别对待。

    关于读取文本文件,请参照http://blog.csdn.net/lightlater/archive/2011/04/15/6326338.aspx

     

     

     

    参考文献:

    C++进行简单的文件I/O操作(http://www.vckbase.com/document/viewdoc/?id=1439 )

    百度文库(http://wenku.baidu.com/view/9faa23db50e2524de5187eb3.html

     

     

     

     

    展开全文
  • C++中输入输出流ifstream/ofstream用法总结

    万次阅读 多人点赞 2014-03-17 10:36:23
    文件的概念 迄今为止,我们讨论的输入输出是以系统指定的标准设备(输入设备为键盘,输出设备为显示器)为对象的。在实际应用中,常以磁盘文件作为对象。即从磁盘文件读取数据,将数据输出到磁盘文件。  所谓...
  • 文本文件(ASCII)的读写

    千次阅读 2017-06-12 21:00:12
    打开文件文件流对象和指定的磁盘文件建立关联,以便使文件流流向指定的磁盘文件,同时也指定文件的工作方式。文件流是内存中的,也就是为内存与磁盘中的文件建立联系。 打开文件的两种不同方法: (1)调用文件...
  • fstream读写文件注意问题

    万次阅读 2017-08-23 10:42:25
    类ofstream, ifstream 和fstream是文件操作的三个类,分别从ostream, istream 和iostream 中派生而来。
  • 如果手中只有一台iPhone4s(iOS ...找一台已经正常登录微信账号的iPhone越狱设备拷贝出wx.dat复制到iPhone4s(iOS 6.1.3 越狱)中,修改Info.Plis中的版本号, 用账号密码登录。【1】 问题: 手里没有越狱设备,只有...
  • C++利用一个fstream流读写文件

    万次阅读 2018-05-09 22:07:29
    fstream对象可以同时具有ifstream和ofstream的功能,尝试使用一个流对文件进行读写的代码如下:#include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; int main() { char ...
  • C++文件操作与文件

    千次阅读 2016-02-19 11:04:27
    1.3对用户来说常用的文件类型有两大类,一类是程序文件,如C++的源程序文件(.cpp),目标文件(.obj),可执行文件(.exe)。一类是数据文件,程序里面常常需要把一些数据存放起来,这种磁盘文件就是数据文件。程序中的...
  • 如图中拉帮结伙,让自己的应用出现在列表中的方法如下:一、在本应用中点击TARGETS –>Info—>Document types ... public.data(打开大多数文件[文件夹除外]的开发方式列表都显示,自己的应用 例如: .db,
  • 前几天在用到对文件操作的时候上网查询了一下,当时只看到说在文件末尾继续写是用ios::ate,结果当然是屡试爽了……后来又仔细看了一下文章,才发现ios::app,用这个果然就可以了。Googl
  • fstream常用方法详解

    万次阅读 2010-10-18 21:56:00
    <fstream>库包含了三个基本的类:ifstream, ...有对象都能够把一个文件名当成构造函数的变量,并能够自动的打开文件,如: <br /> std::ofstream dictionary("myfile.txt"); <br
  • C++ 流 文件操作(输入输出流)

    千次阅读 多人点赞 2018-10-09 19:36:03
    本教程介绍如何从文件读取流和向文件写入流。这就需要用到 C++ 中另一个标准库 fstream,它定义了三个新的数据类型: 数据类型 描述 ofstream 该数据类型表示输出文件流,用于创建文件并向文件...
  • iOS 多渠道打包的解决方案

    千次阅读 2015-07-13 10:48:40
    环境:xcode 6.3.2 开始的思路是用脚本 解压.ipa文件 ,修改.app里面的自定义渠道文件,...#在工程的info.plist 相同路径下 创建Channel.dat文件作为 渠道号读取的文件 #创建这个脚本文件archive.sh和渠道文件Channels
  • 例如:ofstream out("file.dat",ios::out) ifstream out("file.dat",ios::out) ofstream out("file.dat",ios::in) ifstream out("file.dat",ios::in) 有什么区别?
  • c++存取dat数据

    万次阅读 2016-01-22 15:16:16
    众所周知,dat是一个类似加密的二进制格式文件,很多人喜欢将游戏数据保存在dat文件中,只有知道你的存放格式,才能够将数据破解出来,因而研究了dat文件的存取方式。其实就是c++文件的操作,只不过是在取的时候需要...
  • C++中文件流(fstream)的使用方法及示例

    万次阅读 多人点赞 2012-08-01 09:47:00
    C++文件流: fstream // 文件流 ifstream // 输入文件流 ofstream // 输出文件流     #include //创建一个文本文件并写入信息 //同向屏幕上输出信息一样将信息输出至文件 #include #include...
  • C++文件流的建立与关闭

    千次阅读 2017-04-23 16:28:17
    文件流以磁盘文件以及其他可按文件方式进行管理的外部设备作为输入输出对象。ifstream是文件输入流类,ofstream是文件输出流类,fstream是文件输如输出流类。要利用这些类来定义文件流对象,必须在程序的开始部分...
1 2 3 4 5 ... 20
收藏数 5,045
精华内容 2,018
关键字:

.dat文件怎么打开 ios