文件相关操作

1、字符串拼接

2、判断文件是否存在

https://blog.csdn.net/duiwangxiaomi/article/details/118615006

demo见:D:\Github\Storage\c++\standard_library\file\文件操作\判断文件是否存在\judge_file_or_dir_isexists.cpp access函数用来判断指定的文件或目录是否存在(F_OK),已存在的文件或目录是否有可读(R_OK)、可写(W_OK)、可执行(X_OK)权限。F_OK、R_OK、W_OK、X_OK这四种方式通过access函数中的第二个参数mode指定。如果指定的方式有效,则此函数返回0,否则返回-1。

在Windows下没有access函数,但在文件中有_access函数,声明如下:

int _access(const char* _Filename, int _AccessMode); windows下的函数_access与linux下的access函数功能类似,用来判断指定的文件或目录是否仅存在(00),已存在的文件或目录是否有仅读(04)、仅写(02)、既可读又可写(06)权限。这四种方式通过_access函数中的第二个参数mode指定,如果mode传入的值不是0或2或4或6,调用此函数则会crash。如果指定的方式有效,则此函数返回0,否则返回-1。

3、追加写

FILE *fopen(const char *filename, const char *mode)

mode 有下列几种形态字符串:

  • r 以只读方式打开文件,该文件必须存在。
  • r+ 以可读写方式打开文件,该文件必须存在。
  • rb+ 读写打开一个二进制文件,允许读数据。
  • rw+ 读写打开一个文本文件,允许读和写。
  • w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
  • w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
  • a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
  • a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
  • wb 只写打开或新建一个二进制文件;只允许写数据。
  • wb+ 读写打开或建立一个二进制文件,允许读和写。
  • ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
  • at+ 打开一个叫string的文件,a表示append,就是说写入处理的时候是接着原来文件已有内容写入,不是从头写入覆盖掉,t表示打开文件的类型是文本文件,+号表示对文件既可以读也可以写。 上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库以二进制模式打开文件。如果不加b,表示默认加了t,即rt,wt,其中t表示以文本模式打开文件。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask 值。
    有些C编译系统可能不完全提供所有这些功能,有的C版本不用"r+","w+","a+",而用"rw","wr","ar"等,读者注意所用系统的规定。
    

二进制和文本模式的区别

1.在windows系统中,文本模式下,文件以"\r\n"代表换行。若以文本模式打开文件,并用fputs等函数写入换行符"\n"时,函数会自动在"\n"前面加上"\r"。即实际写入文件的是"\r\n" 。 2.在类Unix/Linux系统中文本模式下,文件以"\n"代表换行。所以Linux系统中在文本模式和二进制模式下并无区别。

二进制方式很简单,读文件时,会原封不动的读出文件的全部內容,写的時候,也是把內存缓冲区的內容原封不动的写到文件中。 而文本方式就不一样了,在写文件时,会将换行符号CRLF(0x0D 0x0A)全部转换成单个的0x0A,并且当遇到结束符CTRLZ(0x1A)时,就认为文件已经结束。相应的,写文件时,会将所有的0x0A换成0x0D0x0A。 所以,若使用文本方式打开二进制文件时,就很容易出现文件读不完整,或內容不对的错误。即使是用文本方式打开文本文件,也要谨慎使用,比如复制文件,就不应该使用文本方式。 要特別注意的是,上面这样的说法仅适用于DOS和Windows系统。在Unix和其他一些系统中,沒有文本方式和二进制方式的区分,使不使用'b'标志都是一样的。这是由于不同操作系统对文本文件换行符的定义,和C语言中换行符的定义有所不同而造成的。

什么是文本文件,什么是二进制文件

在Windows和DOS系统中,狭义的文本文件是指扩展名为txt的文件。实际上,那些没有规定格式的,由可理解的的ASCII以及其他编码文字组成的文件都是文本文件,如C源程序文件,HTML超文本,XML。除此之外的其他文件都是二进制文件,如Word文件DOC,图象格式文件JPG。 但是,所谓使用fopen标志打开文本文件与二进制文件的说法并不准确。正确的说法应该是--以文本方式和二进制方式打开文件。因为我们用两种方式都可以任意的文件。

4、保存为json格式

5、读取文件大小

6、创建多级目录

Linux下mkdir函数

头文件库:

#include <sys/stat.h>
#include <sys/types.h>

函数原型: int mkdir(const char *pathname, mode_t mode); 函数说明: mkdir()函数以mode方式创建一个以参数pathname命名的目录,mode定义新创建目录的权限。 返回值: 若目录创建成功,则返回0;否则返回-1,并将错误记录到全局变量errno中。

mode方式: | S_IRWXU | 00700权限,代表该文件所有者拥有读,写和执行操作的权限 | | ----------------- | ----------------------------------------------------- | | S_IRUSR(S_IREAD) | 00400权限,代表该文件所有者拥有可读的权限 | | S_IWUSR(S_IWRITE) | 00200权限,代表该文件所有者拥有可写的权限 | | S_IXUSR(S_IEXEC) | 00100权限,代表该文件所有者拥有执行的权限 | | S_IRWXG | 00070权限,代表该文件用户组拥有读,写和执行操作的权限 | | S_IRGRP | 00040权限,代表该文件用户组拥有可读的权限 | | S_IWGRP | 00020权限,代表该文件用户组拥有可写的权限 | | S_IXGRP | 00010权限,代表该文件用户组拥有执行的权限 | | S_IRWXO | 00007权限,代表其他用户拥有读,写和执行操作的权限 | | S_IROTH | 00004权限,代表其他用户拥有可读的权限 | | S_IWOTH | 00002权限,代表其他用户拥有可写的权限 | | S_IXOTH | 00001权限,代表其他用户拥有执行的权限 |

results matching ""

    No results matching ""