,,C++流操作之fstream用法介绍

,,C++流操作之fstream用法介绍

本文详细介绍了C流操作的fstream的用法,有需要的朋友可以参考一下。

在Windows平台上有许多访问文件的选项。如果采用纯C,则需要使用File*等。当然也可以直接调用Windows API来做。如果采用C,首先想到的就是文件流fstream。虽然在COM层面,我们也可以使用IStream读写文件,效率也很高。但是,本文仅对C流操作做一个简单的探讨。与Windows API或IStream相比,C流操作的通用性更强,因为你可以很容易地将代码移植到其他平台。

Fstream有两个派生类,ifstream和ofstream,分别对应输入文件流和输出文件流。在使用它们之前,您必须在cpp文件中包含它们的头文件。

创建文件流的方法很简单:

ifstream finfin . open(' C:\ filename . txt ');这样就创建了一个输入文件流fin,它对应的文件是c盘根目录下的filename.txt,实际上open方法还包含了一个参数mode来指定它的打开方式。Ios:in通过读取ios:out打开文件通过写入ios:ate打开文件访问指针在文件ios:app的末尾。写ios:trunc时,写ios:binary时擦除旧数据。如果上述代码没有指定任何打开方法,则采用默认参数:输入文件流为ios:in,输出文件流为ios:out。一般只在需要组合特殊模式时才显式指定,比如:IOs:in | IOs:binary;//以二进制模式读取文件

此外,还可以在构造时指定相应的文件路径和名称,使创建过程一步完成。上面的代码可以重写为:

ifstream fin(' C:\ filename . txt ');与打开方法相反,关闭方法的效果与打开方法相反。打开是将文件流对象与外围设备中的文件相关联,关闭是将两者解除关联。但是,需要注意的是,close在清除缓存时也起到了一定的作用。最好让open方法和close方法成对出现。

创建并打开文件流后,您可以像标准I/O一样使用流插入运算符()和流提取运算符()。对于输入文件流,您可以调用getline函数从文件流中读取一整行数据,以便您可以读取包含空格的字符串。

下面是一个读取STLA格式文件的例子。STL是一种常见的快速成像文件格式,其格式非常简单,尤其是ASCII版本(STLA)。代码如下:

stdafx.h复制代码如下://stdafx.h:标准系统包含文件的包含文件//或项目特定的包含文件经常使用,但//很少更改//

#杂注一次

#包含“targetver.h”

# include stdio . h # include tchar . h//添加了# include iostream # include sstream # include fstream # include string # include vector使用命名空间std

//TODO:在此引用程序需要的附加头readstla.cpp

//readstla.cpp:定义控制台应用程序的入口点。//

#include 'stdafx.h '

struct facet { float normal[3];浮动顶点[3][3];};

int _tmain(int argc,_ TCHAR * argv[]){ if(argc 2){ printf('指定一个输入文件!\ n’);返回1;} if stream in(argv[1]);如果(!in.is_open()) { printf('无法打开文件!\ n’);返回1;} //var向量面固体;弦线;字符串字;//检查格式getline(in,line);if (line.find('solid ')!=0) { printf('错误的文件格式!\ n’);英寸close();返回1;} while (getline(in,line)) { if (line.find('刻面法线')!=string:NPOs){ facet f;//读取普通字符串流ns(line);纳秒字;//吃面的ns字;//eat ' normal ' ns f . normal[0]f . normal[1]f . normal[2];//读取顶点getline(in,line);//"外部循环“for(int I=0;i3;i ) { getline(in,line);字符串流vs(行);vs word//eat ' vertex ' vs f . vertex[I][0]f . vertex[I][1]f . vertex[I][2];} getline(in,line);//'endloop' getline(in,line);//' end facet '实体。push _ back(f);} }在。close();//output int CNT=solid。size();printf('read %d facet\n ',CNT);for(int I=0;我cntI){ facet f=solid[I];printf('\nfacet %d:\nnormal=(%f,%f,%f)\n ',\ i 1,f.normal[0],f.normal[1],f . normal[2]);for(int j=0;j 3;j ) { printf('vertex[%d]=(%f,%f,%f)\n ',\ j 1,f.vertex[j][0],f.vertex[j][1],f . vertex[j][2]);} }返回0;} 测试文件为:cube_corner.stl复制代码代码如下:

实心立方_角面法线0.0 -1.0 0.0外环顶点0.0 0.0顶点1.0 0.0 0.0顶点0.0 0.0 1.0端环端面法线0.0 0.0 -1.0外环顶点0.0 0.0顶点0.0 1.0 0.0顶点1.0 0 0.0端环端面法线0.0 0 0.0-1.0外环顶点0.0 0 0.0 0 0 0.0端环端面顶点0.0输入结果为:

阅读四个方面

方面1:

法线=(0.000000,-1.0000000,0.000000)顶点[1]=(0.000000,0.000000,0.00000)顶点[2]=(1.0000000,0.000000,0.000000)顶点[3]=(0.00000000,0.00000,1.000000)

方面2:

法线=(0.000000,0.000000,-1.000000)顶点[1]=(0.0000000,0.000000)顶点[2]=(0.0000000,1.000000,0.000000)顶点[3]=(1.00000000,0.00000,0.00000)

刻面3:法线=(0.000000,0.000000,-1.000000)顶点[1]=(0.000000,0.00000,0.00000)顶点[2]=(0.000000,0.000000,1.000000)顶点[3]=(0.0000000,1.000000,0.000)

刻面4:法线=(0.577000,0.577000,0.577000)顶点[1]=(1.000000,0.000000,0.00000)顶点[2]=(0.0000000,1.000000,0.00000)顶点[3]=(0.0000000,0.00000,1.00。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • vs2015打包安装程序,vs2015程序打包,VS2022实现VC++打包生成安装文件图文详细历程
  • vc++6.0的快捷键,vc 快捷键
  • vc++6.0的快捷键,vc 快捷键,VC6.0常用快捷键大全
  • 绘制圆角矩形的方法,c++ 画矩形,C#画圆角矩形的方法
  • 懒汉式和饿汉式代码,单列模式懒汉和饿汉,C++单例模式的懒汉模式和饿汉模式详解
  • 好用的C++编译器,c++编译软件哪个好
  • semaphore c#,c++ semaphore
  • semaphore c#,c++ semaphore,C++中Semaphore内核对象用法实例
  • dev-c++使用教程,dev c++安装教程
  • dev-c++使用教程,dev c++安装教程,Dev C++ 安装及使用方法(图文教程)
  • C里面指针常量和常量指针的区别,c++指针常量和常量指针
  • C里面指针常量和常量指针的区别,c++指针常量和常量指针,简单总结C++中指针常量与常量指针的区别
  • com组件初始化失败,c#开发com组件,C++中COM组件初始化方法实例分析
  • c++静态成员变量使用,c++静态成员函数和静态成员变量
  • c++静态成员变量使用,c++静态成员函数和静态成员变量,详解c++ 静态成员变量
  • 留言与评论(共有 条评论)
       
    验证码: