常用文件操作函数总结

时间:2023-01-09 09:55:09
/*************压缩文件操作*************************/
            //------------------------------------------------------------------- -----------------
            // 函数名: gzopen
            // 功能描述: 打开名为file的gz文件 
            // 参数:     file:文件名   mode:打开模式  'r' 
            // 返回值:  打开的gz文件描述符 
            //-----------------------------------------------------------------------------------
            gzFile gzopen(const char *file, const char *mode);
            
            //------------------------------------------------------------------- -----------------
            // 函数名: gzclose
            // 功能描述: 关闭为file的gz文件 
            // 参数:     file:文件名   mode:打开模式  'r' 
            // 返回值:  0 正常关闭; -2 文件异常; -4 内存异常
            //-------------------------------------------------------------------------------------
            int gzclose(gzFile file);
            
            //------------------------------------------------------------------- -----------------
            // 函数名: gzread
            // 功能描述: 读取名为file的gz文件的len个字符 
            // 参数:     file:文件名    buf:存储读取字符的数组  len:最多读取字符个数
            // 返回值:  正整数 正常读取字符数; -5 缓存区异常; 0 读取结束
            //-----------------------------------------------------------------------------------
            int gzread(gzFile file, void* buf, unsigned len);
            
            //------------------------------------------------------------------- -----------------
            // 函数名: gzwrite
            // 功能描述: 向名为file的gz文件的写入缓存区中的len个字符 
            // 参数:     file:文件名    buf:待存入字符的数组  len:写入字符个数
            // 返回值:  正整数 实际写入字符数; 0 写入异常
            //-----------------------------------------------------------------------------------
            int gzwrite(gzFile file,void * buf, unsigned len));
            
            //------------------------------------------------------------------- -----------------
            // 函数名: gzprintf
            // 功能描述: 向名为file的gz文件的按照格式format写入数据 
            // 参数:     file:文件名    format:写入格式  
            // 返回值:  正整数 实际写入字符数; 0 写入异常
            //-----------------------------------------------------------------------------------
            int gzprintf(gzFile file, const char *format, ...);
            
            //------------------------------------------------------------------- -----------------
            // 函数名: gzputs
            // 功能描述: 向名为file的gz文件的写入字符串s的内容 
            // 参数:     file:文件名    format:写入格式  
            // 返回值:  非负整数 实际写入字符数; -1 写入异常
            //-----------------------------------------------------------------------------------
            int gzputs(gzFile file, const char *s);
            
            //------------------------------------------------------------------- -----------------
            // 函数名: gzgets
            // 功能描述: 从名为file的gz文件读取字符.读取len-1个字符结束读取字符,或者遇到换行符结束读取字符,或者遇到文件结束符结束读取字符。
            // 参数:     file:文件名    buf:存储读取内容的字符数组 len:读取长度
            // 返回值:  字符串地址: 读取以'\0'结束的字符串时; NULL:遇到错误或者读取到文件结束符时
            //-----------------------------------------------------------------------------------
            char * gzgets(gzFile file, char *buf, int len);
            
            /*************普通文件操作*************************/
            
            //-------------------------------------------------------------------------------------
            // 函数名: close
            // 功能描述:关闭文件 
            // 参数:    fd:已打开的文件描述符 
            // 返回值:  若文件顺利关闭则返回0,发生错误时返回-1
            //-------------------------------------------------------------------------------------
            int close(int fd);
            
            //-------------------------------------------------------------------------------------
            // 函数名: open
            // 功能描述: 按照设置的模式打开文件
            /*  参数:pathname 指向欲打开的文件路径字符串。
                下列是参数flags 所能使用的旗标:
                O_RDONLY 以只读方式打开文件
                O_WRONLY 以只写方式打开文件
                O_RDWR 以可读写方式打开文件。上述三种旗标是互斥的,也就是不可同时使用,但可与下列的旗标利用OR(|)运算符组合。
                O_CREAT 若欲打开的文件不存在则自动建立该文件。
                O_EXCL 如果O_CREAT 也被设置,此指令会去检查文件是否存在。文件若不存在则建立该文件,否则将导致打开文件错误。此外,若O_CREAT与O_EXCL同时设置,并且欲打开的文件为符号连接,则会打开文件失败。
                O_NOCTTY 如果欲打开的文件为终端机设备时,则不会将该终端机当成进程控制终端机。
                O_TRUNC 若文件存在并且以可写的方式打开时,此旗标会令文件长度清为0,而原来存于该文件的资料也会消失。
                O_APPEND 当读写文件时会从文件尾开始移动,也就是所写入的数据会以附加的方式加入到文件后面。
                O_NONBLOCK 以不可阻断的方式打开文件,也就是无论有无数据读取或等待,都会立即返回进程之中。
                O_NDELAY 同O_NONBLOCK。
                O_SYNC 以同步的方式打开文件。
                O_NOFOLLOW 如果参数pathname 所指的文件为一符号连接,则会令打开文件失败。
                O_DIRECTORY 如果参数pathname 所指的文件并非为一目录,则会令打开文件失败。
                此为Linux2.2以后特有的旗标,以避免一些系统安全问题。参数mode 则有下列数种组合,只有在建立新文件时才会生效,此外真正建文件时的权限会受到umask值所影响,因此该文件权限应该为(mode-umaks)。
                S_IRWXU00700 权限,代表该文件所有者具有可读、可写及可执行的权限。
                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 权限,代表其他用户具有可执行的权限。
            */
            // 返回值: 若所有欲核查的权限都通过了检查则返回0 值,表示成功,只要有一个权限被禁止则返回-1 
            //-------------------------------------------------------------------------------------
            int open(const char * pathname, int flags);
            int open( const char * pathname,int flags, mode_t mode);


            //-------------------------------------------------------------------------------------
            // 函数名: read
            // 功能描述: read()会把参数fd 所指的文件传送count个字节到buf指针所指的内存中
            // 参数:     fd 待读取的文件描述符 buf 数据存储缓存区 count 指定读取的字符个数
            // 返回值:  若参数count为0,则read()不会有作用并返回0。否则返回值为实际读取到的字节数,如果返回0,表示已到达文件尾或是无可读取的数据
            //-------------------------------------------------------------------------------------
            ssize_t read(int fd, void * buf, size_t count);
            
            //-------------------------------------------------------------------------------------
            // 函数名: write
            // 功能描述:write()会把参数buf所指的内存写入count个字节到参数fd所指的文件内 
            // 参数:  fd 待写入的文件描述符 buf 数据缓存区 count 指定写入的字符个数
            // 返回值:  如果顺利write()会返回实际写入的字节数 ; -1 写入异常
            //-------------------------------------------------------------------------------------
            ssize_t write(int fd, const void* buf, size_t count);
            
            //-------------------------------------------------------------------------------------
            // 函数名: 
            // 功能描述: 
            /* 参数:
                参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。
                mode有下列几种形态字符串:
                r 打开只读文件,该文件必须存在。
                r+ 打开可读写的文件,该文件必须存在。
                w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
                w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
                a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
                a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
                上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。
                不过在POSIX系统,包含Linux都会忽略该字符。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask值。
            */
            // 返回值:  文件顺利打开后,指向该流的文件指针就会被返回。NULL 文件打开失败
            //-------------------------------------------------------------------------------------
            FILE * fopen(const char * path, const char * mode);
            
            //-------------------------------------------------------------------------------------
            // 函数名: fclose
            // 功能描述: 关闭文件
            // 参数:    stream 已打开的文件描述符 
            // 返回值:  若关文件动作成功则返回0,有错误发生时则返回EOF
            //-------------------------------------------------------------------------------------
            int fclose(FILE * stream);
            
            //-------------------------------------------------------------------------------------
            // 函数名: fwrite
            // 功能描述: 用来将数据写入文件流中
            // 参数:  参数stream为已打开的文件指针,参数ptr 指向欲写入的数据地址,总共写入的字符数以参数size*nmemb来决定
            // 返回值:  返回实际写入的nmemb数目
            //-------------------------------------------------------------------------------------
            size_t fwrite(const void* ptr, size_t size, size_t nmemb, FILE * stream);
            
            //-------------------------------------------------------------------------------------
            // 函数名: fread
            // 功能描述: 从文件流中读取数据
            // 参数: 参数stream为已打开的文件指针,参数ptr 指向欲存放读取进来的数据空间,读取的字符数以参数size*nmemb来决定
            // 返回值:  会返回实际读取到的nmemb数目,如果此值比参数nmemb 来得小,则代表可能读到了文件尾或有错误发生
            //-------------------------------------------------------------------------------------
            size_t fread(void * ptr, size_t size, size_t nmemb, FILE * stream);
            
            /*************流文件操作***************************/
            //ofstream ifstream fstream
            //-------------------------------------------------------------------------------------
            // 函数名: open
            // 功能描述: 按照指定模式打开流文件
            // 参数:     filename 流文件绝对路径  openmode 打开文件模式
            // 返回值:  无
            //-------------------------------------------------------------------------------------
            void open( const char *filename );
            void open( const char *filename, openmode mode );
            
            //-------------------------------------------------------------------------------------
            // 函数名: close
            // 功能描述: 关闭流文件
            // 参数:     无
            // 返回值:  无
            //-------------------------------------------------------------------------------------
            void close();
            
            //-------------------------------------------------------------------------------------
            // 函数名: read
            // 功能描述:函数read()用于输入流,在将字符放入buffer 之前从流中读取num 个字节。如果碰到EOF,read()中止,丢弃不论多少个字节已经放入 
            // 参数:  buffer 输入缓存   num输入字符个数   
            // 返回值:  输入流
            //-------------------------------------------------------------------------------------
            istream &read( char *buffer, streamsize num );
            
            //-------------------------------------------------------------------------------------
            // 函数名: write
            // 功能描述: 用于输出流,将buffer中读取num个字符放入输出流中
            // 参数:     buffer输出字符缓存   num输出字符个数
            // 返回值:  输出流
            //-------------------------------------------------------------------------------------
            ostream &write( const char *buffer, streamsize num );
            
            //-------------------------------------------------------------------------------------
            // 函数名: 
            // 功能描述:getline()函数用于输入流,读取字符到buffer中,直到下列情况发生
            /*
                num - 1个字符已经读入, 
                碰到一个换行标志,
                碰到一个EOF, 
                或者,任意地读入,直到读到字符delim。delim字符不会被放入buffer中。
            */
            // 参数:  buffer输出字符缓存  num 字符个数  delim  结束字符
            // 返回值:  输出流
            //-------------------------------------------------------------------------------------
            istream &getline( char *buffer, streamsize num );
            istream &getline( char *buffer, streamsize num, char delim );
            



#endif