博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

C++笔记(1)

Posted on 2018-03-26 09:07  HelenL  阅读(213)  评论(1编辑  收藏  举报

C++笔记1文件与流笔记

参考博客:

https://blog.csdn.net/kingstar158/article/details/6859379

 
   

 

 

关闭文件中:

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

插入操作符:<<(进行了重载)

成员函数:eof ,它是ifstream 从类 ios 中继承过来的,当到达文件末尾时返回true

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

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

要想重置这些成员函数所检查的状态标志,使用成员函数clear(),没有参数。

流指针 get 和 put 的值对文本文件(text file)和二进制文件(binary file)的计算方法都是不同的,因为文本模式的文件中某些特殊字符可能被修改。由于这个原因,建议对以文本文件模式打开的文件总是使用seekg 和 seekp的第一种原型,而且不要对tellg 或 tellp 的返回值进行修改。

 

缓存和同步(Buffers and Synchronization)

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

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

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

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

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

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

 

句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。

 

 

 

C++笔记2——vector类

.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的

首先在程序开头处加上#include<vector>以包含所需要的类文件vector

 

 

 

 

C++笔记3——string类

C++ string append()添加文本

使用append()添加文本常用方法:

直接添加另一个完整的字符串:

如str1.append(str2);

添加另一个字符串的某一段子串:

如str1.append(str2, 11, 7);

添加几个相同的字符:

如str1.append(5, '.');

注意,个数在前字符在后.上面的代码意思为在str1后面添加5个".".

标准库的string类提供了3个成员函数来从一个string得到c类型的字符数组:c_str()、data()、copy(p,n)。

1. c_str():生成一个const char*指针,指向以空字符终止的数组。

assign方法可以理解为先将原字符串清空,然后赋予新的值作替换。

1. c_str():生成一个const char*指针,指向以空字符终止的数组。

注:

①这个数组的数据是临时的,当有一个改变这些数据的成员函数被调用后,其中的数据就会失效。因此要么现用先转换,要么把它的数据复制到用户自己可以管理的内存中。注意。看下例:

② c_str()返回一个客户程序可读不可改的指向字符数组的指针,不需要手动释放或删除这个指针。

 

C++笔记4——用 _findfirst 和 _findnext 查找文件

http://www.cnblogs.com/ranjiewen/p/5960976.html

一、这两个函数均在io.h里面。

二、首先了解一下一个文件结构体:

struct _finddata_t {

    unsigned    attrib;

    time_t      time_create;   

    time_t      time_access;   

    time_t      time_write;

    _fsize_t    size;

    char        name[260];

};

time_t,其实就是long

而_fsize_t,就是unsigned long

现在来解释一下结构体的数据成员吧。 

attrib,就是所查找文件的属性:_A_ARCH(存档)、_A_HIDDEN(隐藏)、_A_NORMAL(正常)、_A_RDONLY(只读)、 _A_SUBDIR(文件夹)、_A_SYSTEM(系统)。

time_create、time_access和time_write分别是创建文件的时间、最后一次访问文件的时间和文件最后被修改的时间。

size:文件大小

name:文件名。

三、用 _findfirst 和 _findnext 查找文件

 

1、_findfirst函数:long _findfirst(const char *, struct _finddata_t *);

 

第一个参数为文件名,可以用"*.*"来查找所有文件,也可以用"*.cpp"来查找.cpp文件。第二个参数是_finddata_t结构体指针。若查找成功,返回文件句柄,若失败,返回-1。

2、_findnext函数:int _findnext(long, struct _finddata_t *);

第一个参数为文件句柄,第二个参数同样为_finddata_t结构体指针。若查找成功,返回0,失败返回-1。

3、_findclose()函数:int _findclose(long);

只有一个参数,文件句柄。若关闭成功返回0,失败返回-1。

//遍历文件夹及其子文件夹下所有文件。操作系统中文件夹目录是树状结构,使用深度搜索策略遍历所有文件。用到_A_SUBDIR属性

//在判断有无子目录的if分支中,由于系统在进入一个子目录时,匹配到的头两个文件(夹)是"."(当前目录),".."(上一层目录)。

//需要忽略掉这两种情况。当需要对遍历到的文件做处理时,在else分支中添加相应的代码就好