C++文件读写详解(ofstream,ifstream,fstream)及C++ string类

C++文件读写详解(ofstream,ifstream,fstream)及C++ string类
C++文件读写详解(ofstream,ifstream,fstream)及C++ string类

在看C++编程思想中,每个练习基本都是使用ofstream,ifstream,fstream,以前粗略知道其用法和含义,在看了几位大牛的博文后,进行整理和总结:

这里主要是讨论fstream的内容:

[java]view plaincopyprint?

1.#include

2.ofstream //文件写操作内存写入存储设备

3.ifstream //文件读操作,存储设备读区到内存中

4.fstream //读写操作,对打开的文件可进行读写操作

1.打开文件

在fstream类中,成员函数open()实现打开文件的操作,从而将数据流和文件进行关联,通过ofstream,ifstream,fstream对象进行对文件的读写操作

函数:open()

[cpp]view plaincopyprint?

1.

2.public member function

3.

4.void open ( const char * filename,

5. ios_base::openmode mode = ios_base::in | ios_base::out );

6.

7.void open(const wchar_t *_Filename,

8. ios_base::openmode mode= ios_base::in | ios_base::out,

9.int prot = ios_base::_Openprot);

10.

11.

1.ofstream out;

2.out.open("Hello.txt", ios::in|ios::out|ios::binary) //根

据自己需要进行适当的选取

1.

2.ofstream out("...", ios::out);

3.ifstream in("...", ios::in);

4.fstream foi("...", ios::in|ios::out);

5.

6.

当使用默认方式进行对文件的操作时,你可以使用成员函数is_open()对文件是否打开进行验证

2.关闭文件

当文件读写操作完成之后,我们必须将文件关闭以使文件重新变为可访问的。成员函数close(),它负责将缓存中的数据排放出来并关闭文件。这个函数一旦被调用,原先的流对象就可以被用来打开其它的文件了,这个文件也就可以重新被其它的进程所访问了。为防止流对象被销毁时还联系着打开的文件,析构函数将会自动调用关闭函数close。

3.文本文件的读写

类ofstream, ifstream 和fstream 是分别从ostream, istream 和iostream 中引申而来的。这就是为什么fstream 的对象可以使用其父类的成员来访问数据。

一般来说,我们将使用这些类与同控制台(console)交互同样的成员函数(cin 和cout)来进行输入输出。如下面的例题所示,我们使用重载的插入操作符<<:

[cpp]view plaincopyprint?

1. // writing on a text file

2. #include

3.int main () {

4. ofstream out("out.txt");

5. if (out.is_open())

6. {

7. out << "This is a line.\n";

8. out << "This is another line.\n";

9. out.close();

10. }

11. return 0;

12. }

13.//结果: 在out.txt中写入:

14.This is a line.

15.This is another line

从文件中读入数据也可以用与cin>>的使用同样的方法:

[cpp]view plaincopyprint?

1.// reading a text file

2. #include

3. #include

4. #include

5.

6.int main () {

7.char buffer[256];

8. ifstream in("test.txt");

9. if (! in.is_open())

10. { cout << "Error opening file"; exit (1); }

11. while (!in.eof() )

12. {

13. in.getline (buffer,100);

14. cout << buffer << endl;

15. }

16. return 0;

17. }

18. //结果在屏幕上输出

19. This is a line.

20. This is another line

上面的例子读入一个文本文件的内容,然后将它打印到屏幕上。注意我们使用了一个新的成员函数叫做eof ,它是ifstream 从类ios 中继承过来的,当到达文件末尾时返回true 。

状态标志符的验证(Verification of state flags)

除了eof()以外,还有一些验证流的状态的成员函数(所有都返回bool型返回值):?bad()

如果在读写过程中出错,返回true 。例如:当我们要对一个不是打开为写状态的文

件进行写入时,或者我们要写入的设备没有剩余空间的时候。

?fail()

除了与bad() 同样的情况下会返回true 以外,加上格式错误时也返回true ,例如

当想要读入一个整数,而获得了一个字母的时候。

?eof()

如果读文件到达文件末尾,返回true。

?good()

这是最通用的:如果调用以上任何一个函数返回true 的话,此函数返回false 。要想重置以上成员函数所检查的状态标志,你可以使用成员函数clear(),没有参数。

获得和设置流指针(get and put stream pointers)

所有输入/输出流对象(i/o streams objects)都有至少一个流指针:

?ifstream,类似istream, 有一个被称为get pointer的指针,指向下一个将被读取的元素。

?ofstream, 类似ostream, 有一个指针put pointer ,指向写入下一个元素的位置。

?fstream, 类似iostream, 同时继承了get 和put

我们可以通过使用以下成员函数来读出或配置这些指向流中读写位置的流指针:?tellg() 和tellp()

这两个成员函数不用传入参数,返回pos_type 类型的值(根据ANSI-C++ 标准) ,

就是一个整数,代表当前get 流指针的位置(用tellg) 或put 流指针的位置(用

tellp).

?seekg() 和seekp()

这对函数分别用来改变流指针get 和put的位置。两个函数都被重载为两种不同的

原型:

seekg ( pos_type position );

seekp ( pos_type position );

使用这个原型,流指针被改变为指向从文件开始计算的一个绝对位置。要求传入的

参数类型与函数tellg 和tellp 的返回值类型相同。

seekg ( off_type offset, seekdir direction );

seekp ( off_type offset, seekdir direction );

使用这个原型可以指定由参数direction决定的一个具体的指针开始计算的一个位移

(offset)。它可以是:

1.// obtaining file size

2. #include

3. #include

4.

5. const char * filename = "test.txt";

6.

7.int main () {

8.long l,m;

9. ifstream in(filename, ios::in|ios::binary);

10. l = in.tellg();

11. in.seekg (0, ios::end);

12. m = in.tellg();

13. in.close();

14. cout << "size of " << filename;

15. cout << " is " << (m-l) << " bytes.\n";

16. return 0;

17. }

18.

19. //结果:

20. size of example.txt is 40 bytes.

4.二进制文件

在二进制文件中,使用<< 和>>,以及函数(如getline)来操作符输入和输出数据,没有什么实际意义,虽然它们是符合语法的。

文件流包括两个为顺序读写数据特殊设计的成员函数:write 和read。第一个函数(write) 是ostream 的一个成员函数,都是被ofstream所继承。而read 是istream 的一个成员函数,被ifstream 所继承。类fstream 的对象同时拥有这两个函数。它们的原型是:

write ( char * buffer, streamsize size );

read ( char * buffer, streamsize size );

这里buffer 是一块内存的地址,用来存储或读出数据。参数size 是一个整数值,表示要从缓存(buffer)中读出或写入的字符数。

[cpp]view plaincopyprint?

1.// reading binary file

2. #include

3. #include

4.

5. const char * filename = "test.txt";

6.

7.int main () {

8.char * buffer;

9.long size;

10. ifstream in (filename, ios::in|ios::binary|ios::ate);

11. size = in.tellg();

12. in.seekg (0, ios::beg);

13. buffer = new char [size];

14. in.read (buffer, size);

15. in.close();

16.

17. cout << "the complete file is in a buffer";

18.

19. delete[] buffer;

20. return 0;

21. }

22. //运行结果:

23. The complete file is in a buffer

5.缓存和同步(Buffers and Synchronization)

当我们对文件流进行操作的时候,它们与一个streambuf 类型的缓存(buffer)联系在一起。这个缓存(buffer)实际是一块内存空间,作为流(stream)和物理文件的媒介。例如,对于一个输出流,每次成员函数put (写一个单个字符)被调用,这个字符不是直接被写入该输出流所对应的

物理文件中的,而是首先被插入到该流的缓存(buffer)中。

当缓存被排放出来(flush)时,它里面的所有数据或者被写入物理媒质中(如果是一个输出流的话),或者简单的被抹掉(如果是一个输入流的话)。这个过程称为同步(synchronization),它会在以下

任一情况下发生:

?当文件被关闭时:在文件被关闭之前,所有还没有被完全写出或读取的缓存都将被同步。

?当缓存buffer 满时:缓存Buffers 有一定的空间限制。当缓存满时,它会被自动同步。

?控制符明确指明:当遇到流中某些特定的控制符时,同步会发生。这些控制符包括:flush 和endl。

?明确调用函数sync():调用成员函数sync() (无参数)可以引发立即同步。这个函数返回一个int 值,等于-1 表示流没有联系的缓存或操作失败。

标准C++中的string类的用法总结

相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用。但是如果离开了MFC框架,还有没有这样使用起来非常方便的类呢?答案是肯定的。也许有人会说,即使不用MFC框架,也可以想办法使用MFC 中的API,具体的操作方法在本文最后给出操作方法。其实,可能很多人很可能会忽略掉标准C++中string类的使用。标准C++中提供的string类得功能也是非常强大的,一般都能满足我们开发项目时使用。现将具体用法的一部分罗列如下,只起一个抛砖引玉的作用吧,好了,废话少说,直接进入正题吧!

要想使用标准C++中string类,必须要包含

#include // 注意是,不是,带.h的是C语言中的头文件using std::string;

using std::wstring;

using namespace std;

下面你就可以使用string/wstring了,它们两分别对应着char和wchar_t。

string和wstring的用法是一样的,以下只用string作介绍:

string类的构造函数:

string(const char *s); //用c字符串s初始化

string(int n,char c); //用n个字符c初始化

此外,string类还支持默认构造函数和复制构造函数,如string s1;string s2="hello";都是正确的写法。当构造的string太长而无法表达时会抛出length_error异常;

string类的字符操作:

const char &operator[](int n)const;

const char &at(int n)const;

char &operator[](int n);

char &at(int n);

operator[]和at()均返回当前字符串中第n个字符的位置,但at函数提供范围检查,当越界时会抛出out_of_range异常,下标运算符[]不提供检查访问。

const char *data()const;//返回一个非null终止的c字符数组

const char *c_str()const;//返回一个以null终止的c字符串

int copy(char *s, int n, int pos = 0) const;//把当前串中以pos开始的n个字符拷贝到以s为起始位置的字符数组中,返回实际拷贝的数目

string的特性描述:

int capacity()const; //返回当前容量(即string中不必增加内存即可存放的元素个数)int max_size()const; //返回string对象中可存放的最大字符串的长度

int size()const; //返回当前字符串的大小

int length()const; //返回当前字符串的长度

bool empty()const; //当前字符串是否为空

void resize(int len,char c);//把字符串当前大小置为len,并用字符c填充不足的部分

string类的输入输出操作:

string类重载运算符operator>>用于输入,同样重载运算符operator<<用于输出操作。函数getline(istream &in,string &s);用于从输入流in中读取字符串到s中,以换行符'\n'分开。

string的赋值:

string &operator=(const string &s);//把字符串s赋给当前字符串

string &assign(const char *s);//用c类型字符串s赋值

string &assign(const char *s,int n);//用c字符串s开始的n个字符赋值

string &assign(const string &s);//把字符串s赋给当前字符串

string &assign(int n,char c);//用n个字符c赋值给当前字符串

string &assign(const string &s,int start,int n);//把字符串s中从start开始的n个字符赋给当前字符串

string &assign(const_iterator first,const_itertor last);//把first和last迭代器之间的部分赋给字符串

string的连接:

string &operator+=(const string &s);//把字符串s连接到当前字符串的结尾

string &append(const char *s); //把c类型字符串s连接到当前字符串结尾string &append(const char *s,int n);//把c类型字符串s的前n个字符连接到当前字符串结尾

string &append(const string &s); //同operator+=()

string &append(const string &s,int pos,int n);//把字符串s中从pos开始的n个字符连接到当前字符串的结尾

string &append(int n,char c); //在当前字符串结尾添加n个字符c

string &append(const_iterator first,const_iterator last);//把迭代器first和last之间的部分连接到当前字符串的结尾

string的比较:

bool operator==(const string &s1,const string &s2)const;//比较两个字符串是否相等运算符">","<",">=","<=","!="均被重载用于字符串的比较;

int compare(const string &s) const;//比较当前字符串和s的大小

int compare(int pos, int n,const string &s)const;//比较当前字符串从pos开始的n个字符组成的字符串与s的大小

int compare(int pos, int n,const string &s,int pos2,int n2)const;//比较当前字符串从pos开始的n个字符组成的字符串与s中

//pos2开始的n2个字符组成的字符串的大小

int compare(const char *s) const;

int compare(int pos, int n,const char *s) const;

int compare(int pos, int n,const char *s, int pos2) const;

compare函数在>时返回1,<时返回-1,==时返回0

string的子串:

string substr(int pos = 0,int n = npos) const;//返回pos开始的n个字符组成的字符串

string的交换:

void swap(string &s2); //交换当前字符串与s2的值

string类的查找函数:

int find(char c, int pos = 0) const;//从pos开始查找字符c在当前字符串的位置

int find(const char *s, int pos = 0) const;//从pos开始查找字符串s在当前串中的位置int find(const char *s, int pos, int n) const;//从pos开始查找字符串s中前n个字符在当前串中的位置

int find(const string &s, int pos = 0) const;//从pos开始查找字符串s在当前串中的位置//查找成功时返回所在位置,失败返回string::npos的值

int rfind(char c, int pos = npos) const;//从pos开始从后向前查找字符c在当前串中的位置

int rfind(const char *s, int pos = npos) const;

int rfind(const char *s, int pos, int n = npos) const;

int rfind(const string &s,int pos = npos) const;

//从pos开始从后向前查找字符串s中前n个字符组成的字符串在当前串中的位置,成功返回所在位置,失败时返回string::npos的值

int find_first_of(char c, int pos = 0) const;//从pos开始查找字符c第一次出现的位置int find_first_of(const char *s, int pos = 0) const;

int find_first_of(const char *s, int pos, int n) const;

int find_first_of(const string &s,int pos = 0) const;

//从pos开始查找当前串中第一个在s的前n个字符组成的数组里的字符的位置。查找失败返回string::npos

int find_first_not_of(char c, int pos = 0) const;

int find_first_not_of(const char *s, int pos = 0) const;

int find_first_not_of(const char *s, int pos,int n) const;

int find_first_not_of(const string &s,int pos = 0) const;

//从当前串中查找第一个不在串s中的字符出现的位置,失败返回string::npos

int find_last_of(char c, int pos = npos) const;

int find_last_of(const char *s, int pos = npos) const;

int find_last_of(const char *s, int pos, int n = npos) const;

int find_last_of(const string &s,int pos = npos) const;

int find_last_not_of(char c, int pos = npos) const;

int find_last_not_of(const char *s, int pos = npos) const;

int find_last_not_of(const char *s, int pos, int n) const;

int find_last_not_of(const string &s,int pos = npos) const;

//find_last_of和find_last_not_of与find_first_of和find_first_not_of相似,只不过是

从后向前查找

string类的替换函数:

string &replace(int p0, int n0,const char *s);//删除从p0开始的n0个字符,然后在p0处插入串s

string &replace(int p0, int n0,const char *s, int n);//删除p0开始的n0个字符,然后在p0处插入字符串s的前n个字符

string &replace(int p0, int n0,const string &s);//删除从p0开始的n0个字符,然后在

p0处插入串s

string &replace(int p0, int n0,const string &s, int pos, int n);//删除p0开始的n0个字符,然后在p0处插入串s中从pos开始的n个字符

string &replace(int p0, int n0,int n, char c);//删除p0开始的n0个字符,然后在p0处

插入n个字符c

string &replace(iterator first0, iterator last0,const char *s);//把[first0,last0)之间

的部分替换为字符串s

string &replace(iterator first0, iterator last0,const char *s, int n);//把[first0,last0)之间的部分替换为s的前n个字符

string &replace(iterator first0, iterator last0,const string &s);//把[first0,last0)之

间的部分替换为串s

string &replace(iterator first0, iterator last0,int n, char c);//把[first0,last0)之间的部分替换为n个字符c

string &replace(iterator first0, iterator last0,const_iterator first, const_iterator last);//把[first0,last0)之间的部分替换成[first,last)之间的字符串

string类的插入函数:

string &insert(int p0, const char *s);

string &insert(int p0, const char *s, int n);

string &insert(int p0,const string &s);

string &insert(int p0,const string &s, int pos, int n);

//前4个函数在p0位置插入字符串s中pos开始的前n个字符

string &insert(int p0, int n, char c);//此函数在p0处插入n个字符c

iterator insert(iterator it, char c);//在it处插入字符c,返回插入后迭代器的位置

void insert(iterator it, const_iterator first, const_iterator last);//在it处插入[first,last)之间的字符

void insert(iterator it, int n, char c);//在it处插入n个字符c

string类的删除函数

iterator erase(iterator first, iterator last);//删除[first,last)之间的所有字符,返回删除后迭代器的位置

iterator erase(iterator it);//删除it指向的字符,返回删除后迭代器的位置

string &erase(int pos = 0, int n = npos);//删除pos开始的n个字符,返回修改后的字符串

string类的迭代器处理:

string类提供了向前和向后遍历的迭代器iterator,迭代器提供了访问各个字符的语法,类似于指针操作,迭代器不检查范围。

用string::iterator或string::const_iterator声明迭代器变量,const_iterator不允许改变迭代的内容。常用迭代器函数有:

const_iterator begin()const;

iterator begin(); //返回string的起始位置

const_iterator end()const;

iterator end(); //返回string的最后一个字符后面的位置

const_iterator rbegin()const;

iterator rbegin(); //返回string的最后一个字符的位置

const_iterator rend()const;

iterator rend(); //返回string第一个字符位置的前面

rbegin和rend用于从后向前的迭代访问,通过设置迭代器

string::reverse_iterator,string::const_reverse_iterator实现

字符串流处理:

通过定义ostringstream和istringstream变量实现,#include 头文件中

例如:

string input("hello,this is a test");

istringstream is(input);

string s1,s2,s3,s4;

is>>s1>>s2>>s3>>s4;//s1="hello,this",s2="is",s3="a",s4="test"

ostringstream os;

os<

cout<

以上就是对C++ string类的一个简要介绍。用的好的话它所具有的功能不会比MFC中的CString类逊色多少,呵呵,个人意见!

最后要介绍如何在Win32 应用程序中引用MFC中的部分类,例如CString。

1.在工程目录下右键选择"Properties”--->"Configuration

Properties”--->“General”--->"Use of MFC"--->"Use MFC in a Static Library",

默认的是:"Use Standard Windows Libraries",如下图:

2.在你所用的所有头文件之前包含#include ,例如:可以在stdafx.h文件的最前面包含#include 头文件,这样在你的源代码中就可以使用

CString类了,不过这样也有一个缺点,就是编译出来的程序要比原来的大很多。我试过一个小程序,选择"Use Standard Windows Libraries" 编译出来

的Release版本大概92kb,使用"Use MFC in a Static Library"编译出来的Release版本大概192kb,足足大了100kb,这个就个人考虑了......

泰克示波器的使用方法-1

示波器的使用方法 示波器虽然分成好几类,各类又有许多种型号,但是一般的示波器除频带宽度、输入灵敏度等不完全相同外,在使用方法的基本方面都是相同的。本章以SR-8型双踪示波器为例介绍。 (一)面板装置 SR-8型双踪示波器的面板图如图5-12所示。其面板装置按其位置和功能通常可划分为3大部分:显示、垂直(Y轴)、水平(X轴)。现分别介绍这3个部分控制装置的作用。 1.显示部分主要控制件为: (1)电源开关。 (2)电源指示灯。 (3)辉度调整光点亮度。 (4)聚焦调整光点或波形清晰度。 (5)辅助聚焦配合“聚焦”旋钮调节清晰度。 (6)标尺亮度调节坐标片上刻度线亮度。 (7)寻迹当按键向下按时,使偏离荧光屏的光点回到显示区域,而寻到光点位置。 (8)标准信号输出 1kHz、1V方波校准信号由此引出。加到Y轴输入端,用以校准Y 轴输入灵敏度和X轴扫描速度。 2.Y轴插件部分 (1)显示方式选择开关用以转换两个Y轴前置放大器Y A与YB 工作状态的控制件,具有五种不同作用的显示方式:

“交替”:当显示方式开关置于“交替”时,电子开关受扫描信号控制转换,每次扫描都轮流接通Y A或YB 信号。当被测信号的频率越高,扫描信号频率也越高。电 子开关转换速率也越快,不会有闪烁现象。这种工作状态适用于观察两个工作频率较高的信号。 “断续”:当显示方式开关置于“断续”时,电子开关不受扫描信号控制,产生频率固定为200kHz方波信号,使电子开关快速交替接通Y A和YB。由于开关动作频率高于被测信号频率,因此屏幕上显示的两个通道信号波形是断续的。当被测信号频率较高时,断续现象十分明显,甚至无法观测;当被测信号频率较低时,断续现象被掩盖。因此,这种工作状态适合于观察两个工作频率较低的信号。 “Y A”、“YB ”:显示方式开关置于“Y A ”或者“YB ”时,表示示波器处于单通道工作,此时示波器的工作方式相当于单踪示波器,即只能单独显示“Y A”或“YB ”通道的信号波形。 “Y A + YB”:显示方式开关置于“Y A + YB ”时,电子开关不工作,Y A与YB 两路信号均通过放大器和门电路,示波器将显示出两路信号叠加的波形。 (2)“DC-⊥-AC” Y轴输入选择开关,用以选择被测信号接至输入端的耦合方式。置于“DC”是直接耦合,能输入含有直流分量的交流信号;置于“AC”位置,实现交流耦合,只能输入交流分量;置于“⊥”位置时,Y轴输入端接地,这时显示的时基线一般用来作为测试直流电压零电平的参考基准线。 (3)“微调V/div” 灵敏度选择开关及微调装置。灵敏度选择开关系套轴结构,黑色旋钮是Y轴灵敏度粗调装置,自10mv/div~20v/div分11档。红色旋钮为细调装置,顺时针方向增加到满度时为校准位置,可按粗调旋钮所指示的数值,读取被测信号的幅度。当此旋钮反时针转到满度时,其变化范围应大于2.5倍,连续调节“微调”电位器,可实现各档级之间的灵敏度覆盖,在作定量测量时,此旋钮应置于顺时针满度的“校准”位置。 (4)“平衡” 当Y轴放大器输入电路出现不平衡时,显示的光点或波形就会随“V/div”开关的“微调”旋转而出现Y轴方向的位移,调节“平衡”电位器能将这种位移减至最小。 (5)“↑↓ ” Y轴位移电位器,用以调节波形的垂直位置。 (6)“极性、拉Y A” Y A通道的极性转换按拉式开关。拉出时Y A 通道信号倒相显示,即显示方式(Y A+ YB )时,显示图像为YB - Y A。 (7)“内触发、拉YB ” 触发源选择开关。在按的位置上(常态)扫描触发信号分别

C++文件操作详解(ifstream、ofstream、fstream)

C++文件操作详解(ifstream 、ofstream 、fstream ) C++通过以下几个类支持文件的输入输岀: ofstream: 写操作(输岀)的文件类 ifstream: 读操作(输入)的文件类 fstream: 可同时读写操作的文件类 打开 文件(Open a file ) 对这些类的一个对象所做的第一个操作通常就是将它和一个真正的文件联系起来, 也就是说打开 一个文件。被打开的文件在程序中由一个流对象 (stream object )来表示(这些类的一个实例), 而对这个流对象所做的任何输入输岀操作实际就是对该文件所做的操作。 要通过一个流对象打开一个文件,我们使用它的成员函数 open (): void ope n (const char * file name, ope nm ode mode ); 这里file name 是一个字符串,代表要打开的文件名, mode 是以下标志符的一个组合: ios::i n 为输入(读)而打开文件 ios::out 为输岀(写)而打开文件 ios::ate 初始位置:文件尾 ios::app 所有输岀附加在文件末尾 ios::tru nc 如果文件已存在则先删除该文件 ios::b inary 二进制方式 这些标识符可以被组合使用,中间以 ”或”操作符(|)间隔。例如,如果我们想要以二进制方式打 开文件"example.bin" 来写入一些数据,我们可以通过以下方式调用成员函数 open ()来实现: ofstream file; file.ope n ("example.b in ”,ios::out | ios::app | ios::b in ary ); ofstream, ifstream 和fstream 所有这些类的成员函数 ope n 都包含了一个默认打开文件的方 式,这三个类的默认方式各不相同: 类 参数的默认方式 ofstream i os::out | ios::trunc ifstream i os::in fstream ios::i n | ios::out 只有当函数被调用时没有声明方式参数的情况下, 默认值才会被采用。 如果函数被调用时声明了 任何参数,默认值将被完全改写,而不会与调用参数组合。 由于对类ofstream, ifstream 和fstream 的对象所进行的第一个操作通常都是打开文件,这 些类都有一个构造函数可以直接调用 open 函数,并拥有同样的参数。这样,我们就可以通过以 下方式进行与上面同样的定义对象和打开文件的操作: (由ostream 引申而来) (由istream 引申而来) (由iostream 引申而来)

C语言程序中关于文件的操作

文件操作函数C语言(FILE fputc fgetc fputs fgets fscanf fprintf) 在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面就分别介绍之。 一、流式文件操作 这种方式的文件操作有一个重要的结构FILE,FILE在stdio.h中定义如下:typedef struct{ int level;/*fill/empty level of buffer*/ unsigned flags;/*File status flags*/ char fd;/*File descriptor*/ unsigned char hold;/*Ungetc char if no buffer*/ int bsize;/*Buffer size*/ unsigned char_FAR*buffer;/*Data transfer buffer*/ unsigned char_FAR*curp;/*Current active pointer*/ unsigned istemp;/*Temporary file indicator*/ short token;/*Used for validity checking*/ }FILE;/*This is the FILE object*/ FILE这个结构包含了文件操作的基本属性,对文件的操作都要通过这个结构的指针来进行,此种文件操作常用的函数见下表函数功能 fopen()打开流 fclose()关闭流 fputc()写一个字符到流中 fgetc()从流中读一个字符 fseek()在流中定位到指定的字符 fputs()写字符串到流 fgets()从流中读一行或指定个字符 fprintf()按格式输出到流 fscanf()从流中按格式读取 feof()到达文件尾时返回真值 ferror()发生错误时返回其值 rewind()复位文件定位器到文件开始处 remove()删除文件 fread()从流中读指定个数的字符 fwrite()向流中写指定个数的字符 tmpfile()生成一个临时文件流 tmpnam()生成一个唯一的文件名 下面就介绍一下这些函数 1.fopen() fopen的原型是:FILE*fopen(const char*filename,const char*mode),fopen实现三个功

示波器_使用方法_步骤

示波器 摘要:以数据采集卡为硬件基础,采用虚拟仪器技术,完成虚拟数字示波器的设计。能够具有运行停止功能,图形显示设置功能,显示模式设置功能并具有数据存储和查看存储数据等功能。实验结果表明, 该仪器能实现数字示波器的的基本功能,解决了传统测试仪器的成本高、开发周期长、数据人工记录等问题。 1.实验目的 1.理解示波器的工作原理,掌握虚拟示波器的设计方法。 2.理解示波器数据采集的原理,掌握数据采集卡的连接、测试和编程。 3.掌握较复杂的虚拟仪器的设计思想和方法,用LabVIEW实现虚拟示波器。 2. 实验要求 1.数据采集 用ELVIS实验平台,用DAQmx编程,通过数据采集卡对信号进行采集,并进行参数的设置。 2.示波器界面设计 (1)设置运行及停止按钮:按运行时,示波器工作;按停止时,示波器停止工作。 (2)设置图形显示区:可显示两路信号,并可进行图形的上下平移、图形的纵向放大与缩小、图形的横向扩展与压缩。 (3)设置示波器的显示模式:分为单通道模式(只显示一个通道的图形),多通道模式(可同时显示两个通道),运算模式(两通道相加、两通道相减等)。

万联芯城https://www.360docs.net/doc/8d11584525.html,作为国内优秀的电子元器件采购网,一直秉承着以良心做好良芯的服务理念,万联芯城为全国终端生产研发企业提供原装现货电子元器件产品,拥有3000平方米现代化管理仓库,所售电子元器件有IC集成电路,二三极管,电阻电容等多种类别主动及被动类元器件,可申请样片,长久合作可申请账期,万联芯城为客户提供方便快捷的一站式电子元器件配套服务,提交物料清单表,当天即可获得各种元件的优势报价,整单付款当天发货,物料供应全国,欢迎广大客户咨询合作,点击进入万联芯城

C FSTREAM文件操作详细说明

fstream文件操作详细说明 目录 一、打开文件 (2) 二、关闭文件 (3) 三、读写文件 (3) 1、文本文件的读写 (3) 2、二进制文件的读写 (4) 四、检测EOF (5) 五、文件定位 (5)

fstream文件操作详细说明 在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符: 1、插入器(<<) 向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout<<"Write Stdout"<<''\n'';就表示把字符串"Write Stdout"和换行字符(''\n'')输出到标准输出流。 2、析取器(>>) 从流中输入数据。比如说系统有一个默认的标准输入流(cin),一般情况下就是指的键盘,所以,cin>>x;就表示从标准输入流中读取一个指定类型(即变量x的类型)的数据。 在C++中,对文件的操作是通过stream的子类fstream(file stream)来实现的,所以,要用这种方式操作文件,就必须加入头文件fstream.h。 一、打开文件 在fstream类中,有一个成员函数open(),就是用来打开文件的,其原型是: void open(const char*filename,int mode,int access); 参数说明: filename:要打开的文件名 mode:要打开文件的方式 access:打开文件的属性 打开文件的方式在类ios(是所有流式I/O类的基类)中定义,常用的值如下: ios::app:以追加的方式打开文件 ios::ate:文件打开后定位到文件尾,ios:app就包含有此属性 ios::binary:以二进制方式打开文件,缺省的方式是文本方式。两种方式的区别见前文ios::in:文件以输入方式打开 ios::out:文件以输出方式打开 ios::nocreate:不建立文件,所以文件不存在时打开失败 ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败 ios::trunc:如果文件存在,把文件长度设为0 可以用“或”把以上属性连接起来,如ios::out|ios::binary 打开文件的属性取值是: 0:普通文件,打开访问 1:只读文件 2:隐含文件 4:系统文件 可以用“或”或者“+”把以上属性连接起来,如:1|2就是以只读和隐含属性打开文件。 例如:以二进制输入方式打开文件c:\config.sys

Linux下C语言的文件读写

Linux下C语言的文件(fputc,fgetc,fwrite,fread对文件读写操 作) //================================== fputc 向文件写入字符 #include #include main() { FILE *fp; char ch; if((fp=fopen("test.txt","w"))==NULL) { printf("不能打开文件\n"); exit(0); } while ((ch=getchar())!='\n') fputc( ch, fp ); fclose(fp); } ------------- 小提示: fp=fopen("test.txt","w") ,把"w"改为"a" 可以创建文件并且追加写入内容 exit(0); 需要包含stdlib.h 头文件,才能使用 //============================================================ fgetc 读取字符 #include #include main( int argc, char *argv[] ) { char ch;

FILE *fp; int i; if((fp=fopen(argv[1],"r"))==NULL) { printf("不能打开文件\n"); exit(0); } while ((ch=fgetc(fp))!=EOF) putchar(ch); fclose(fp); } 文件结尾,通过判断EOF //============================================================== fwrite 的使用 使数组或结构体等类型可以进行一次性读写 #include #include main() { FILE *fp1; int i; struct student{ char name[10]; int age; float score[2]; char addr[15]; }stu; if((fp1=fopen("test.txt","wb"))==NULL) { printf("不能打开文件"); exit(0); } printf("请输入信息,姓名年龄分数1 分数2 地址:\n"); for( i=0;i<2;i++) { scanf("%s %d %f %f %s",https://www.360docs.net/doc/8d11584525.html,,&stu.age,&stu.score[0],&stu.score[1], stu.addr);

示波器的初级使用方法教程

示波器的使用方法教程 ST-16示波器的使用 示波器是有着极其广泛用途的测量仪器之一〃借助示波器能形象地观察波形的瞬变过程,还可以测量电压。电流、周期和相位,检查放大器的失真情况等〃示波器的型号很多,它的基本使用方法是差不多的〃下面以通用ST一16型示波器为例,介绍示波器的使用方法。 面板上旋钮或开关的功能 图1是ST一16型示波器的面板图。 示波器是以数字座标为基础来显示波形的〃通常以X轴表示时间,Y轴表示幅度〃因而在图1中,面板下半部以中线为界,左面的旋钮全用于Y轴,右面的旋钮全用于X 轴。面板上半部分为显示屏。显示屏的右边有三个旋钮是调屏幕用的〃所有的旋钮,开关功能见表1。其中8、10,14,16号旋钮不需经常调,做成内藏式。

显示屏读数方法 在显示屏上,水平方向X轴有10格刻度,垂直方向Y轴有8格刻度〃这里的一格刻度读做一标度,用div表示〃根据被测波形垂直方向(或水平方向)所占有的标度数,乘以垂直输入灵敏度开关所在档位的V/div数(或水平方向t/div),得出的积便是测量结果。Y轴使用10:1衰减探头的话还需再乘10。 例如图2中测电压峰—峰值时,V/div档用0〃1V/div,输入端用了10 : l 衰减探头,则Vp-p=0〃1V/div×3〃6div×10=3〃6V,t/div档为2ms/div,则波形的周期:T=2ms/div×4div=8ms。 使用前的准备 示波器用于旋钮与开关比较多,初次使用往往会感到无从着手。初学者可按表2方式进行调节。表2位置对示波器久藏复用或会使用者也适用。

使用前的校准 示波器的测试精度与电源电压有关,当电网电压偏离时,会产生较大的测量误差〃因此在使用前必须对垂直和水平系统进行校准。校准方法步骤如下: 1〃接通电源,指示灯有红光显示,稍等片刻,逆时针调节辉度旋钮,并适当调准聚焦,屏幕上就显示出不同步的校准信号方波。 2〃将触发电平调离“自动”位置,逆时针方向旋转旋钮使方波波形同步为止。并适当调节水平移位(11)和垂直移位(5)。 3〃分别调节垂直输入部分增益校准旋钮(10)和水平扫描部分的扫描校准旋钮(14),使屏幕显示的标准方波的垂直幅度为5div,水平宽度为10div,如图3所示,ST一16示波器便可正常工作了。 示波器演示和测量举例 一,用ST一16示波器演示半波整流工作原理: 首先将垂直输入灵敏度选择开关(以下简写V/div)拨到每格0〃5V档,扫描时间转换开关(s/div)拨至每格5ms档,输入耦合开关拨至AC档,将输入探头的两端与电源变压器次级相接,见图4,这时屏幕显示如图5(a)所示的交流电压波形。 如果将探头移到二极管的负端处,这时屏幕上显示图5(b)所示的半波脉冲电压波形〃接上容量较大的电解电容器C进行滤波,调节一下触发电平旋钮(15),在示波器屏幕上可看到较为平稳的直流电压波形,见图5(c)。电容C的容量越大,脉冲成分越小,电压越平稳。

fstream_h

fstream.h #if _MSC_VER > 1000 #pragma once #endif #ifdef __cplusplus #ifndef _INC_FSTREAM #define _INC_FSTREAM #if !defined(_WIN32) && !defined(_MAC) #error ERROR: Only Mac or Win32 targets supported! #endif #ifdef _MSC_VER // Currently, all MS C compilers for Win32 platforms default to 8 byte alignment. #pragma pack(push,8) #include #endif // _MSC_VER /* Define _CRTIMP */ #ifndef _CRTIMP #ifdef _DLL #define _CRTIMP __declspec(dllimport) #else /* ndef _DLL */ #define _CRTIMP #endif /* _DLL */ #endif /* _CRTIMP */ #include #ifdef _MSC_VER // C4514: "unreferenced inline function has been removed" #pragma warning(disable:4514) // disable C4514 warning // #pragma warning(default:4514) // use this to reenable, if desired #endif // _MSC_VER typedef int filedesc; class _CRTIMP filebuf : public streambuf { public: static const int openprot; // default share/prot mode for open // optional share values for 3rd argument (prot) of open or constructor static const int sh_none; // exclusive mode no sharing static const int sh_read; // allow read sharing static const int sh_write; // allow write sharing // use (sh_read | sh_write) to allow both read and write sharing options for setmode member function static const int binary; static const int text; filebuf(); filebuf(filedesc);

c语言文件的读写格式

C程序文件的读写操作 在对文件进行读、写操作之前,首先要解决的问题是如何把程序中要读、写的文件与磁盘上实际的数据文件联系起来。在c语言中,其实这并不困难,只需要用c语言提供的库函数fopen“打开”文件就可以实现这些联系。Fopen函数的一般调用形式为: Fopen(文件名,文件使用方式); 函数返回一个指向file类型的指针。例如: FILE *fp; /*****定义一个文件指针*/ fp=fopen(”file_a”,”r”); foen函数调用中用两个字符串作为参数。第一个字符串中包含了进行读、写操作的文件名,用来指定所要打开的文件。在本例中,指定的函数名:file_a。第二个字符串中指定了文件的使用方式,用户可通过这个参数来指定对文件的使用意图。 如果以上函数调用成功,函数返回一个fille类型的指针,付给指针变量fp,从而把指针fp与文件file_a联系起来,也就是说,在此调用之后,指针fp就指向了文件file_a。 C语言中,最常用的文件使用用方式及其含义如下: (1)“r”。为读而打开文本文件。当指定这种形式时,对打开的文件只能进行“读”操作。若制定的文件不存在,则会出错,若去读一个不允许读的文件时也会出错。 (2)“rb”。为读而打开一个二进制文件,其余如“r”功能。 (3)“w”。为写而打开文本文件。这是。如果指定的文件不存在,系统将在指定位置建立一个新文件;如果文件已经存在,则将从文件的起始位置开始写,文件中原有内容将全部覆盖。 (4)“WB”. 为读而打开一个二进制文件,其余如“w”功能。 (5)“a”。为在文件后面添加数据而打开文本文件。这是。如果指定的文件不存在,系统将在指定位置建立一个新文件;如果文件已经存在,则将从文件的末尾位置开始写,文件中原有内容将保留。 (6)“ab”。为读而打开一个二进制文件,其余如“a”功能。 (7)“r+”。为读和写而打开文本文件。用这种方式时,指定的文件应当已经存在,既可以对文件进行读,也可以进行写。读写都是从文件起始位置开始。 关闭文件: fclose(文件指针); 程序例子: #include #include //fputc和fgetc函数所在文件 main() { FILE *fp=NULL; //定义文件指针 char ch; //定义字符变量 fp=fopen("d:\\wenjian.txt","w"); //打开或新建打开文件,并使指针 //指向文件 if(fp==NULL)

fstream用法

ofstream/ifstream 文本/二进制方式读入/写出数据方法 文件I/O 在C++中比烤蛋糕简单多了。在这篇文章里,我会详细解释ASCII和二进制文件的输入输出的每个细节,值得注意的是,所有这些都是用C++完成的。 一、ASCII 输出 为了使用下面的方法, 你必须包含头文件(译者注:在标准C++中,已经使用取代< fstream.h>,所有的C++标准头文件都是无后缀的。)。这是的一个扩展集, 提供有缓冲的文件输入输出操作. 事实上, 已经被包含了, 所以你不必包含所有这两个文件, 如果你想显式包含他们,那随便你。我们从文件操作类的设计开始, 我会讲解如何进行ASCII I/O 操作。如果你猜是"fstream," 恭喜你答对了!但这篇文章介绍的方法,我们分别使用"ifstream"?和"ofstream" 来作输入输出。 如果你用过标准控制台流"cin"?和"cout," 那现在的事情对你来说很简单。我们现在开始讲输出部分,首先声明一个类对象。ofstream fout; 这就可以了,不过你要打开一个文件的话, 必须像这样调用ofstream::open()。 fout.open("output.txt"); 你也可以把文件名作为构造参数来打开一个文件. ofstream fout("output.txt"); 这是我们使用的方法, 因为这样创建和打开一个文件看起来更简单. 顺便说一句, 如果你要打开的文件不存在,它会为你创建一个, 所以不用担心文件创建的问题. 现在就输出到文件,看起来和"cout"的操作很像。对不了解控制台输出"cout"的人, 这里有个例子。 int num = 150; char name[] = "John Doe"; fout << "Here is a number: " << num << "\n"; fout << "Now here is a string: " << name << "\n"; 现在保存文件,你必须关闭文件,或者回写文件缓冲. 文件关闭之后就不能再操作了, 所以只有在你不再操作这个文件的时候才调用它,它会自动保存文件。回写缓冲区会在保持文件打开的情况下保存文件, 所以只要有必要就使用它。回写看起来像另一次输出, 然后调用方法关闭。像这样:

示波器使用方法步骤

示波器是一种用途十分广泛的电子测量仪器。它能把肉眼看不见的电信号变换成看得见的图像,便于人们研究各种电现象的变化过程。示波器的使用方法: 示波器,“人”如其名,就是显示波形的机器,它还被誉为“电子工程师的眼睛”。它的核心功能就是为了把被测信号的实际波形显示在屏幕上,以供工程师查找定位问题或评估系统性能等等。它的发展同样经历了模拟和数字两个时代 数字示波器,更准确的名称是数字存储示波器,即DSO(Digital Storage Oscilloscope)。这个“存储”不是指它可以把波形存储到U盘等介质上,而是针对于模拟示波器的即时显示特性而言的。模拟示波器靠的是阴极射线管(CRT,即俗称的电子枪)发射出电子束,而这束电子在根据被测信号所形成的磁场下发生偏转,从而在荧屏上反映出被测信号的波形,这个过程是即时地,中间没有任何的存储过程的。而数字示波器的原理却是这样的:首先示波器利用前端ADC对被测信号进行快速的采样,这个采样速度通常都可以达到每秒几百M到几G次,是相当快的;而示波器的后端显示部件是液晶屏,液晶屏的刷新速率一般只有几十到一百多Hz;如此,前端采样的数据就不可能实时的反应到屏幕上,于是就诞生了存储这个环节:示波器把前端采样来的数据暂时保存在内部的存储器中,而显示刷新的时候再来这个存储器中读取数据,用这级存储环节解决前端采样和后端显示之间的速度差异。

很多人在第一次见到示波器的时候,可能会被他面板上众多的按钮唬住,再加上示波器一般身价都比较高,所以对使用它就产生了一种畏惧情绪。这是不必要的,因为示波器虽然看起来很复杂,但实际上要使用它的核心功能——显示波形,并不复杂,只要三四个步骤就能搞定了,而现在示波器的复杂都是因为附加了很多辅助功能造成的,这些辅助功能自然都有它们的价值,熟练灵活的应用它们可以起到事半功倍的效果。作为初学者,我们先不管这些,我们只把它最核心的、最基本的功能应用起来即可。

ofstream的使用方法

ofstream的使用方法 ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间; 在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符: 1、插入器(<<) 向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout<<"Write Stdout"<<’\n’;就表示把字符串"Write Stdout"和换行字符(’\n’)输出到标准输出流。 2、析取器(>>) 从流中输入数据。比如说系统有一个默认的标准输入流(cin),一般情况下就是指的键盘,所以,cin>>x;就表示从标准输入流中读取一个指定类型(即变量x的类型)的数据。 在C++中,对文件的操作是通过stream的子类fstream(file stream)来实现的,所以,要用这种方式操作文件,就必须加入头文件fstream.h。下面就把此类的文件操作过程一一道来。 一、打开文件 在fstream类中,有一个成员函数open(),就是用来打开文件的,其原型是: void open(const char* filename,int mode,int access); 参数: filename:要打开的文件名 mode:要打开文件的方式 access:打开文件的属性 打开文件的方式在类ios(是所有流式I/O类的基类)中定义,常用的值如下: ios::app:以追加的方式打开文件 ios::ate:文件打开后定位到文件尾,ios:app就包含有此属性 ios::binary:以二进制方式打开文件,缺省的方式是文本方式。两种方式的区别见前文ios::in:文件以输入方式打开(文件数据输入到内存) ios::out:文件以输出方式打开(内存数据输出到文件) ios::nocreate:不建立文件,所以文件不存在时打开失败 ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败 ios::trunc:如果文件存在,把文件长度设为0 可以用“或”把以上属性连接起来,如ios::out|ios::binary 打开文件的属性取值是: 0:普通文件,打开访问 1:只读文件 2:隐含文件 4:系统文件 可以用“或”或者“+”把以上属性连接起来,如3或1|2就是以只读和隐含属性打开文件。 例如:以二进制输入方式打开文件c:\config.sys fstream file1; file1.open("c:\\config.sys",ios::binary|ios::in,0); 如果open函数只有文件名一个参数,则是以读/写普通文件打开,即: file1.open("c:\\config.sys"); <=> file1.open("c:\\config.sys",ios::in|ios::out,0); 另外,fstream还有和open()一样的构造函数,对于上例,在定义的时侯就可以打开文件了:

C语言读写文件操作

C语言读写文件操作 #include #include #include FILE *stream;//, *stream2; FILE *stream2; void main( void ) { int numclosed; char *list; list="这个程序由czw编写"; //试图打开文件data.txt,如果该文件不存在,则自动创建 if( (stream= fopen( "data.txt", "r" )) == NULL ) { printf( "试图打开'data.txt'\n" ); printf( "'data.txt'不存在\n" ); printf( "'data.txt'被创建\n" ); } else printf( "'data.txt'被打开\n" ); //以写入方式打开 if( (stream2 = fopen( "data.txt", "w+" )) == NULL ) printf( "'data.txt'不存在\n" ); else { printf( "'data.txt'成功被打开\n" ); fwrite(list,strlen(list),30,stream2); printf("写入数据成功\n"); } //如果文件data.txt存在,就会打开成功,则stream!=NULL,这时就关闭stream if (stream!=NULL) if( fclose( stream) ) printf( "文件流 stream 被关闭\n" ); //关闭所有打开的文件流,返回关闭的文件流个数 numclosed = _fcloseall( );

示波器的使用方法

示波器的使用 【实验目的】 1.了解示波器的结构和示波器的示波原理; 2.掌握示波器的使用方法,学会用示波器观察各种信号的波形; 3.学会用示波器测量直流、正弦交流信号电压; 4.观察利萨如图,学会测量正弦信号频率的方法。 【实验仪器】 YB4320/20A/40双踪示波器,函数信号发生器,电池、万用电表。 图1实验仪器实物图 【实验原理】 示波器是一种能观察各种电信号波形并可测量其电压、频率等的电子测量仪器。示波器还能对一些能转化成电信号的非电量进行观测,因而它还是一种应用非常广泛的、通用的电子显示器。 1.示波器的基本结构 示波器的型号很多,但其基本结构类似。示波器主要是由示波管、X轴与Y轴衰减器和放大器、锯齿波发生器、整步电路、和电源等几步分组成。其框图如图2所示。

图2示波器原理框图 (1)示波管 示波管由电子枪、偏转板、显示屏组成。 电子枪:由灯丝H、阴极K、控制栅极G、第一阳极A1、第二阳极A2组成。灯丝通电发热,使阴极受热后发射大量电子并经栅极孔出射。这束发散的电子经圆筒状的第一阳极A1和第二阳极A2所产生的电场加速后会聚于荧光屏上一点,称为聚焦。A1与K之间的电压通常为几百伏特,可用电位器W2调节,A1与K 之间的电压除有加速电子的作用外,主要是达到聚焦电子的目的,所以A1称为聚焦阳极。W2即为示波器面板上的聚焦旋钮。A2与K之间的电压为1千多伏以上,可通过电位器W3调节,A2与K之间的电压除了有聚焦电子的作用外,主要是达到加速电子的作用,因其对电子的加速作用比A1大得多,故称A2为加速阳极。在有的示波器面板上设有W3,并称其为辅助聚焦旋钮。 在栅极G与阳极K之间加了一负电压即U K﹥U G,调节电位器W1可改变它们之间的电势差。如果G、K间的负电压的绝对值越小,通过G的电子就越多,电子束打到荧光屏上的光点就越亮,调节W1可调节光点的亮度。W1在示波器面板上为“辉度”旋钮。 偏转板:水平(X轴)偏转板由D1、D2组成,垂直(Y轴)偏转板由D3、、D4组成。偏转板加上电压后可改变电子束的运动方向,从而可改变电子束在荧光屏上产生的亮点的位置。电子束偏转的距离与偏转板两极板间的电势差成正比。 显示屏:显示屏是在示波器底部玻璃内涂上一层荧光物质,高速电子打在上面就会发荧光,单位时间打在上面的电子越多,电子的速度越大光点的辉度就越大。荧光屏上的发光能持续一段时间称为余辉时间。按余辉的长短,示波器分为长、中、短余辉三种。 (2)X轴与Y轴衰减器和放大器 示波管偏转板的灵敏度较低(约为0.1~1mm/V)当输入信号电压不大时,荧光屏上的光点偏移很小而无法观测。因而要对信号电压放大后再加到偏转板上,为此在示波器中设置了X轴与Y轴放大器。当输入信号电压很大时,放大器无法正常工作,使输入信号发生畸变,甚至使仪器损坏,因此在放大器前级设置有衰减器。X轴与Y轴衰减器和放大器配合使用,以满足对各种信号观测的要求。

ofstream和ifstream详细用法

ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间? 在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符: 1、插入器(<<) 向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout<<"Write Stdout"<<'\n'?就表示把字符串"Write Stdout"和换行字符('\n')输出到标准输出流。 2、析取器(>>) 从流中输入数据。比如说系统有一个默认的标准输入流(cin),一般情况下就是指的键盘,所以,cin>>x?就表示从标准输入流中读取一个指定类型(即变量x的类型)的数据。 在C++中,对文件的操作是通过stream的子类fstream(file stream)来实现的,所以,要用这种方式操作文件,就必须加入头文件fstream.h。下面就把此类的文件操作过程一一道来。 一、打开文件 在fstream类中,有一个成员函数open(),就是用来打开文件的,其原型是: void open(const char* filename,int mode,int access)? 参数: filename: 要打开的文件名 mode: 要打开文件的方式 access: 打开文件的属性 打开文件的方式在类ios(是所有流式I/O类的基类)中定义,常用的值如下: ios::app: 以追加的方式打开文件 ios::ate: 文件打开后定位到文件尾,ios:app就包含有此属性 ios::binary: 以二进制方式打开文件,缺省的方式是文本方式。两种方式的区别见前文 ios::in: 文件以输入方式打开(文件数据输入到内存) ios::out: 文件以输出方式打开(内存数据输出到文件) ios::nocreate: 不建立文件,所以文件不存在时打开失败 ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败 ios::trunc: 如果文件存在,把文件长度设为0 可以用“或”把以上属性连接起来,如ios::out|ios::binary 打开文件的属性取值是: 0:普通文件,打开访问 1:只读文件 2:隐含文件 4:系统文件 可以用“或”或者“+”把以上属性连接起来,如3或1|2就是以只读和隐含属性打开文件。 例如:以二进制输入方式打开文件c:\config.sys fstream file1? file1.open("c:\\config.sys",ios::binary|ios::in,0)?

C语言中文件_数据的输入输出_读写

C语言中文件,数据的输入输出,读写. 文件是数据的集合体,对文件的处理过程就是对文件的读写过程,或输入输出过程。 所谓文件是指内存以外的媒体上以某种形式组织的一组相关数据的有序集合。文件分类: 顺序文件,随机文件。 文本文件和二进制文件。 文本文件也称为ASCII文件,在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。 文本文件可以在屏幕上按字符显示,源程序文件就是文本文件,由于是按字符显示,所以能读懂文件内容。 二进制文件是按二进制编码方式来存放的。这里主要讨论文件的打开,关闭,读,写,定位等操作。 文件的存取方法 C程序的输入输出(I/O)有两种方式:一种称为标准I/O或流式I/O,另一种称为低级I/O。流式I/O是依靠标准库函数中的输入输出函数实现的。低级I/O利用操作系统提供的接口函数(称为底层接口或系统调用)实现输入输出,低级I/O 主要提供系统软件使用。 在C语言中用一个FILE类型的指针变量指向一个文件,(FILE类型是系统在stdio.h中定义的描述已打开文件的一种结构类型),这个指针称为文件指针。FILE *指针变量标识符; 如 FILE *fp; 文件的打开与关闭 所谓打开文件,指的是建立文件的各种有关信息,并使文件指针指向该文件,以便对它进行操作。 关闭文件则是断开指针与文件之间的联系,也就禁止再对该文件进行操作。 1、fopen 函数原型:FILE *fopen(const char *filename,const char *mode); Fopen函数用来打开一个文件,前一部分用来说明文件路径及文件名,后一部分mode指出了打开文件的存取方式;返回值是被打开文件的FILE型指针,若打开失败,则返回NULL。打开文件的语法格式如下: 文件指针名=fopen(文件名,使用文件方式); 文件指针名必须被说明为FILE类型的指针变量。 FILE *fp; fp=fopen(“C:\\Windowss\\abc.txt”,”r”); 注意用两个反斜杠\\来表示目录间的间隔符。 存取文件的模式是一个字符串,可以由字母r,w,a,t,b及+组合而成,各字符的含

C++中文件流(fstream)的使用方法及示例

【转载】C++中文件流(fstream)的使用方法及示例 (2011-08-22 16:00:14)转载▼ 分类:编程拾萃 标签:杂 谈 C++文件流: fstream // 文件流 ifstream // 输入文件流 ofstream // 输出文件流 头文件: #include //创建一个文本文件并写入信息 //同向屏幕上输出信息一样将信息输出至文件 #include #include void main() { ofstream ofs("C:\\example.txt"); //打开文件用于写,若文件不存在就创建它 if (!ofs) return; //打开文件失败则结束运行 f1 << setw(20) << "Name: " << "Beethoven" << endl; //使用插入运算符写文件内容

f1 << setw(20) << "song: " << "Moonlight Sonata" << endl; f1.close(); //关闭文件} 文件操作: 打开文件 文件名 注意路径名中的斜杠要双写,如: "D:\\MyFiles\\ReadMe.txt" 文件打开方式选项: ios::in = 0x01, //供读,文件不存在则创建(ifstream默认的打开方式) ios::out = 0x02, //供写,文件不存在则创建,若文件已存在则清空原内容(ofstream默认的打开方式) ios::ate = 0x04, //文件打开时,指针在文件最后。可改变指针的位置,常和in、out联合使用 ios::app = 0x08, //供写,文件不存在则创建,若文件已存在则在原文件内容后写入新的内容,指针位置总在最后 ios::trunc = 0x10, // 在读写前先将文件长度截断为0(默认) ios::nocreate = 0x20, //文件不存在时产生错误,常和in或app

相关文档
最新文档