C++ 文件操作

2023-05-16

需要了解的概念

[数据流][缓冲区(Buffer)][文件类型][文件存取方式][借助文件指针读写文件]

需要理解的知识点包括:数据流、缓冲区、文件类型、文件存取方式

1.1 数据流:

指程序与数据的交互是以流的形式进行的.进行C语言文件的存取时,都会先进行“打开文件”操作,这个操作就是在打开数据流,而“关闭文件”操作就是关闭数据流

1.2 缓冲区(Buffer):

指在程序执行时,所提供的额外内存,可用来暂时存放做准备执行的数据.它的设置是为了提高存取效率,因为内存的存取速度比磁盘驱动器快得多.
C++ 语言中带缓冲区的文件处理:
C++ 语言的文件处理功能依据系统是否设置“缓冲区”分为两种:

  • 一种是设置缓冲区
  • 另一种是不设置缓冲区

由于不设置缓冲区的文件处理方式,必须使用较低级的I/O函数(包含在头文件io.h和fcntl.h中)来直接对磁盘存取,这种方式的存取速度慢,并且由于不是 C++ 的标准函数,跨平台操作时容易出问题.下面只介绍第一种处理方式,即设置缓冲区的文件处理方式:
当使用标准 I/O 函数(包含在头文件 cstdio 中)时,系统会自动设置缓冲区,并通过数据流来读写文件.
当进行文件读取时,不会直接对磁盘进行读取,而是先打开数据流,将磁盘上的文件信息拷贝到缓冲区内,然后程序再从缓冲区中读取所需数据,如下图所示:

事实上,当写入文件时,并不会马上写入磁盘中,而是先写入缓冲区,只有在缓冲区已满或“关闭文件”时,才会将数据写入磁盘,如下图所示.

1.3 文件类型:

分为文本文件二进制文件两种.

  • 文本文件:  是以字符编码的方式进行保存的,只是计算机以二进制表示数据在外部存储介质上的另一种存放形式.它所存放的每一个字节都可以转换为一个可读字符当向文件中写入数据时,一旦遇到"换行"字符(ASCII 码为10)则会转换成"回车-换行"(ASCII 值为13,10).在读取数据的时候,一遇到"回车-换行"的组合 ASCII 值为13,10),则会转换成为"换行"字符(ASCII 码为10)
  • 二进制文:  件将内存中数据原封不动的读取和写入文件中

二进制文件适用于非字符为主的数据.如果以记事本打开,只会看到一堆乱码.
当按照文本方式其实,除了文本文件外,所有的数据都可以算是二进制文件.二进制文件的优点在于存取速度快,占用空间小,以及可随机存取数据.
在文件操作中因为文本打开方式和二进制文件打开方式会导致数据读取和写入换行时候的不同所以在进行文件操作时候要注意写入和读取的方式要保持一致,如果采用文本方式写入,应该采用文本方式读取,如果采用二进制方式写入,就应该用二进制方式读取,但是不管是文本文件还是二进制文件,如果采用统一的二进制方式写入和读取数据都是不会出错的,不管是文本文件还是二进制文件,都可以采用二进制方式或者文本方式打开,然后进行写入或读取.但是对于二进制文件来说,如果以文本凡是读取数据时候可能会出现一些问题

1.4 文件存取方式:

包括顺序存取方式随机存取方式两种.

  • 顺序读取也就是从上往下,一笔一笔读取文件的内容.保存数据时,将数据附加在文件的末尾.这种存取方式常用于文本文件,而被存取的文件则称为顺序文件.
  • 随机存取方式多半以二进制文件为主.它会以一个完整的单位来进行数据的读取和写入,通常以结构为单位.

1.5 借助文件指针读写文件

我们如果要访问文件,要借助于文本变量,即文件指针才可以完成
文件在进行读写操作之前要先打开,使用完毕要关闭.所谓打开文件,实际上是建立文件的各种有关信息,并使文件指针指向该文件,以便进行其它操作.关闭文件则断开指针与文件之间的联系,也就禁止再对该文件进行操作.

1.6 操作流图

[返回目录]


 

 

文件操作主要函数

[文件打开与关闭][文件的读写][文件的缓冲区操作][文件的其他操作]

2.1 文件打开与关闭

[fopen][fclose]

2.1.1 fopen(打开文件)

头文件: #include<cstdio>

函数声明: FILE * fopen(const char * path,const char * mode);

参数:

  • path字符串 包含欲打开的文件路径及文件名如果没有指定文件路径,则默认为当前工作目录
  • mode字符串

使用方式 具体含义              
“rt”    只读打开一个文本文件,只允许读数据
“wt”     只写打开或建立一个文本文件,只允许写数据
“at”   追加打开一个文本文件,并在文件末尾写数据
“rb”     只读打开一个二进制文件,只允许读数据
“wb”    只写打开或建立一个二进制文件,只允许写数据
“ab”     追加打开一个二进制文件,并在文件末尾写数据
“rt+”   读写打开一个文本文件,允许读和写
“wt+”   读写打开或建立一个文本文件,允许读写
“at+”   读写打开一个文本文件,允许读,或在文件末追加数据
“rb+”   读写打开一个二进制文件,允许读和写
“wb+”   读写打开或建立一个二进制文件,允许读和写
“ab+”   读写打开一个二进制文件,允许读,或在文件末追加数据

文件使用方式由r,w,a,t,b,+六个字符拼成,各字符的含义是:

  • r(read): 读 (打开只读文件,该文件必须存在)
  • w(write): 写 (打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失.若文件不存在则建立该文件)
  • a(append): 追加(以附加的方式打开只写文件.若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留)
  • t(text): 文本文件,可省略不写
  • b(banary): 二进制文件
  • +: 可读和写

说明:

  • 上述的形态字符串都可以再加一个 b 字符,如 rb、w+b 或 ab+ 等组合,加入 b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件.不过在 POSIX 系统,包含 Linux 都会忽略该字符.由 fopen() 所建立的新文件会具有 S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666) 权限,此文件权限也会参考 umask 值.
  • 使用 fopen() 函数打开的文件会先将文件复制到缓冲区.注意:所下达的读取或写入动作,都是针对缓冲区进行存取而不是磁盘,只有当使用 fclose() 函数关闭文件时,缓冲区中的数据才会写入磁盘.

返回值:  文件顺利打开后,指向该流的文件指针就会被返回.若果文件打开失败则返回 NULL , 并把错误代码存在 errno 中.(附加说明 一般而言,开文件后会作一些文件读取或写入的动作,若开文件失败,接下来的读写动作也无法顺利进行,所以在 fopen() 后请作错误判断及处理.)

2.1.2 fclose(关闭文件)

头文件: #include<cstdio>

函数声明: int fclose(FILE * stream);

说明: fclose() 用来关闭先前 fopen() 打开的文件.此动作会让缓冲区内的数据写入文件中,并释放系统所提供的文件资源.

返回值:

  • 若关文件动作成功则返回 0 ,有错误发生时则返回 EOF 并把错误代码存到 errno.
  • 错误代码 EBADF 表示参数 stream 非已打开的文件.

[返回子目录]

2.2 文件的读写

[fgetc][fputc][fgets][fputs][fread][fwrite][fprintf 与 fscanf][getc][getchar][gets][putc][putchar][puts][ungetc]

对文件的读和写是最常用的文件操作.在C语言中提供了多种文件读写的函数:(使用以下函数都要求包含头文件cstdio.)

  • 字符读写函数 :fgetc 和 fputc
  • 字符串读写函数:fgets 和 fputs
  • 数据块读写函数:freed 和 fwrite
  • 格式化读写函数:fscanf 和 fprinf

2.2.1 fgetc (由文件中读取一个字符)

头文件: include<cstdio>

函数声明: int fgetc(FILE * stream);

说明:

  • fgetc()从参数stream所指的文件中读取一个字符.若读到文件尾而无数据时便返回EOF.
  • 字符读取函数fgetc()可从文件数据流中一次读取一个字符,然后读取光标移动到下一个字符,并逐步将文件的内容读出

例子解析:


int ch; 

ch=fgetc(fp);

其意义是从打开的文件fp中读取一个字符并送入 ch 中.

对于fgetc函数的使用有以下几点说明:

  • 在fgetc函数调用中,读取的文件必须是以读或读写方式打开的.
  • 读取字符的结果也可以不向字符变量赋值 (例如:  fgetc(fp); 但是读出的字符不能保存)
  • 在文件内部有一个位置指针,用来指向文件的当前读写字节位置,在文件打开时,该指针总是指向文件的第一个字节.使用fgetc 函数后,该位置指针将向后移动一个字节. 因此可连续多次使用fgetc函数,读取多个字符.

应注意文件指针和文件内部的位置指针不是一回事.

  • 文件指针是指向整个文件的,须在程序中定义说明,只要不重新赋值,文件指针的值是不变的.
  • 文件内部的位置指针用以指示文件内部的当前读写位置,每读写一次,该指针均向后移动,它不需在程序中定义说明,有系统自动设置而是的.

返回值 : getc() 会返回读取到的字符,若返回 EOF 则表示到了文件尾

2.2.2 fputc(将一指定字符写入文件流中)

头文件: #include<cstdio>

函数声明: int fputc(int c,FILE * stream);

说明:

  • fputc 会将参数c 转为 unsigned char 后写入参数 stream 指定的文件中.
  • 其意 putc 函数的使用几点说明:
    • 被写入的文件可以用写、读写、追加方式打开,用写或读写方式,写入字符时是从文件首开始的.如需保留原有文件内容,希望写入的字符,被写入的文件若不存在,则创建该文件.
    • 每写入一个字符,文件内部位置指针向后移动一个字节.
    • fputc 函数有一个返回值,如写入成功则返回写入的字符,否则返回一个 EOF .可用此来判断写符,写入一个文件,再把该文件内容读出显示在屏幕上.


返回值: fputc() 会返回写入成功的字符,即参数 c.若返回 EOF 则代表写入失败.

2.2.3 fgets(由文件中读取一字符串)

头文件: #include<cstdio>

函数声明: char * fgets(char * s,int size,FILE * stream);

说明: fgets() 用来从参数 stream 所指的文件内读入字符并存到参数 s 所指的内存空间,直到出现换行字符、读到文件尾或是已读了size-1个字符为止,最后会加上 NULL 作为字符串结束.

返回值: gets() 若成功则返回 s 指针,返回 NULL 则表示有错误发生.  

2.2.4 fputs(将一指定的字符串写入文件内)

头文件: #include<cstdio>

函数声明: int fputs(const char * s,FILE * stream);

说明: fputs() 用来将参数 s 所指的字符串写入到参数 stream 所指的文件内.

返回值: 若成功则返回写出的字符个数,返回 EOF 则表示有错误发生.

2.2.5 fread(从文件流读取数据)

头文件: #include<cstdio>

函数声明: size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream);

说明: fread() 用来从文件流中读取数据

参数:

  • stream 为已打开的文件指针
  • ptr 指向欲存放读取进来的数据空间,读取的字符数以参数 size*nmemb 来决定.Fread() 会返回实际读取到的 nmemb 数目,如果此值比参数 nmemb 来得小,则代表可能读到了文件尾或有错误发生,这时必须用 feof() 或 ferror() 来决定发生什么情况.

返回值: 返回实际读取到的nmemb数目.

2.2.6 fwrite(将数据写至文件流)

头文件: #include<cstdio>

函数声明: size_t fwrite(const void * ptr,size_t size,size_t nmemb,FILE * stream);

说明: 

  • fwrite() 用来将数据写入文件流中
  • fprintf 和 fscanf 函数的读写对象不是终端(标准输入输出),而是磁盘文件

参数:

  • stream 为已打开的文件指针
  • ptr 指向欲写入的数据地址,总共写入的字符数以参数 size*nmemb 来决定.Fwrite() 会返回实际写入的 nmemb 数目.

返回值: 返回实际写入的 nmemb 数目.

2.2.7 fprintf 与 fscanf(将指定字符写磁盘文件)

函数声明:

  • _CRTIMP int __cdecl fprintf(FILE *, const char *, ...);
  • _CRTIMP int __cdecl fscanf(FILE *, const char *, ...);

说明: 它们与 printf 和 scanf 函数相仿,都是格式化读写函数.不同的是:fprintf 和 fscanf 函数的读写对象不是终端(标准输入输出),而是磁盘文件.printf 函数是将内容输出到终端(屏幕),因此,fprintf 就是将内容输出到磁盘文件了

2.2.8 getc(由文件中读取一个字符)

头文件: #include<cstdio>

函数声明: int getc(FILE * stream);

说明: 

  • getc() 用来从参数 stream 所指的文件中读取一个字符.若读到文件尾而无数据时便返回 EOF
  • getc() 与 fgetc() 作用相同,但 getc() 为宏定义,非真正的函数调用.

返回值: getc() 会返回读取到的字符,若返回 EOF 则表示到了文件尾.

2.2.9 getchar(由标准输入设备内读进一字符)

头文件: #include<cstdio>

函数声明: int getchar(void);

说明: 

  • getchar() 用来从标准输入设备中读取一个字符.然后将该字符从 unsigned char 转换成 int 后返回
  • getchar() 非真正函数,而是 getc(stdin) 宏定义

返回值: getchar()会返回读取到的字符,若返回EOF则表示有错误发生.

2.2.10 gets(由标准输入设备内读进一字符串)

头文件: #include<cstdio>

函数声明: char * gets(char *s);

说明: gets() 用来从标准设备读入字符并存到参数 s 所指的内存空间,直到出现换行字符或读到文件尾为止,最后加上 NULL 作为字符串结束,由于 gets() 无法知道字符串 s 的大小,必须遇到换行字符或文件尾才会结束输入,因此容易造成缓冲溢出的安全性问题.建议使用 fgets() 取代

返回值: gets() 若成功则返回 s 指针,返回 NULL 则表示有错误发生.

2.2.11 putc(将一指定字符写入文件中)

头文件: #include<cstdio> 

函数声明: int putc(int c,FILE * stream);

说明:

  • putc() 会将参数 c 转为 unsigned char 后写入参数 stream 指定的文件中
  • putc() 与 fputc()作用相同,但 putc() 为宏定义,非真正的函数调用.

返回值: putc() 会返回写入成功的字符,即参数 c.若返回 EOF 则代表写入失败.

2.2.12 putchar(将指定的字符写到标准输出设备)

头文件: #include<cstdio>

函数声明: int putchar (int c);

说明:

  • putchar() 用来将参数 c 字符写到标准输出设备.
  • putchar() 非真正函数,而是 putc(c,stdout) 宏定义.

返回值: putchar() 会返回输出成功的字符,即参数 c.若返回 EOF 则代表输出失败.

2.2.13 puts(由标准输入设备内读进一字符串)

头文件: #include<cstdio>

函数声明: int puts(char *s);

说明:  把函数的字符串写到标准输出流 stdout,在输出流中用换行符('\n')替换字符串中的结束符null 字符('\0 ') 

返回值: puts() 若成功则返回正的非零值,返回 EOF 则表示有错误发生.

2.2.14 ungetc(将指定字符写回文件流中)

头文件: #include<cstdio>

函数声明: int ungetc(int c,FILE * stream);

说明: ungetc() 将参数 c 字符写回参数 stream 所指定的文件流.这个写回的字符会由下一个读取文件流的函数取得.

返回值: 成功则返回 c 字符,若有错误则返回 EOF.

[返回子目录]

2.3 文件的缓冲区操作:

[fflush] [setbuf] [setbuffer] [setlinebuf] [setvbuf]

2.3.1 fflush(更新缓冲区)

头文件: #include<cstdio>

函数声明: int fflush(FILE* stream);

说明: fflush() 会强迫将缓冲区内的数据写回参数 stream 指定的文件中.如果参数 stream 为 NULL ,fflush() 会将所有打开的文件数据更新.

返回值: 成功返回 0 ,失败返回 EOF ,错误代码存于errno中.(错误代码: EBADF 参数 stream 指定的文件未被打开,或打开状态为只读)

2.3.2 setbuf(设置文件流的缓冲区)

头文件: #include<cstdio>

函数声明: void setbuf(FILE * stream,char * buf);

说明: 在打开文件流后,读取内容之前,调用 setbuf() 可以用来设置文件流的缓冲区

参数:

  • stream为指定的文件流
  • buf 指向自定的缓冲区起始地址.如果参数 buf 为 NULL 指针,则为无缓冲 IO .Setbuf() 相当于调用 setvbuf(stream,buf,buf?_IOFBF:_IONBF,BUFSIZ)

2.3.3 setbuffer(设置文件流的缓冲区)

头文件: #include<cstdio>

函数声明: void setbuffer(FILE * stream,char * buf,size_t size);

说明: 在打开文件流后,读取内容之前,调用 setbuffer() 可用来设置文件流的缓冲区.

参数:

  • stream 为指定的文件流
  • buf 指向自定的缓冲区起始地址
  • size 为缓冲区大小

2.3.4 setlinebuf(设置文件流为线性缓冲区)

头文件: #include<cstdio>

函数声明: void setlinebuf(FILE * stream);

说明: setlinebuf() 用来设置文件流以换行为依据的无缓冲 IO.相当于调用 setvbuf(stream,(char * )NULL,_IOLBF,0); 

2.3.5 setvbuf(设置文件流的缓冲区)

头文件: #include<cstdio>

函数声明: int setvbuf(FILE * stream,char * buf,int mode,size_t size);

说明: 在打开文件流后,读取内容之前,调用 setvbuf() 可以用来设置文件流的缓冲区

参数:

  • stream 为指定的文件流
  • buf 指向自定的缓冲区起始地址
  • size 为缓冲区大小
  • mode取值有下列几种:
    • _IONBF 无缓冲 IO
    • _IOLBF 以换行为依据的无缓冲 IO
    • _IOFBF 完全无缓冲 IO.如果参数 buf 为 NULL 指针,则为无缓冲 IO

[返回子目录]

2.4 文件的其他操作:

[fseek] [ftell] [rewind] [clearerr] [fdopen] [feof] [fileno] [freopen] 

2.4.1 fseek(移动文件流的读写位置)

头文件: #include<cstdio>

函数声明: int fseek(FILE * stream,long offset,int whence);

说明: 

  • fseek() 用来移动文件流的读写位置
  • fseek() 不像 lseek() 会返回读写位置,因此必须使用ftell()来取得目前读写的位置

参数:

  • stream 为已打开的文件指针
  • offset 为根据参数whence来移动读写位置的位移数(offset 为整数时往后移, 为复数时往前移)
  • whence为下列其中一种:
    • SEEK_SET 从距文件开头offset位移量为新的读写位置
    • SEEK_CUR 以目前的读写位置往后增加offset个位移量
    • SEEK_END 将读写位置指向文件尾后再增加offset个位移量。

返回值: 当调用成功时则返回0,若有错误则返回-1,errno会存放错误代码。

2.4.2 ftell(取得文件流的读取位置)

头文件: #include<cstdio>

函数声明: long ftell(FILE * stream);

说明: ftell() 用来取得文件流目前的读写位置

返回值: 当调用成功时则返回目前的读写位置,若有错误则返回 -1,errno 会存放错误代码(错误代码: EBADF 参数 stream 无效或可移动读写位置的文件流)

2.4.3 rewind(重设文件流的读写位置为文件开头)

头文件: #include<cstdio>

函数声明: void rewind(FILE * stream);

说明: rewind() 用来把文件流的读写位置移至文件开头。参数 stream 为已打开的文件指针。此函数相当于调用 fseek(stream,0,SEEK_SET)。

2.4.4 clearerr(清除错误旗标)

头文件: #include<cstdio>

函数声明: void clearerr(FILE * stream);

说明: clearerr() 清除 stream 指定的文件流所使用的错误旗标。

2.4.5 fdopen(将文件描述词转为文件指针)

头文件: #include<cstdio>

函数声明: FILE * fdopen(int fildes,const char * mode);

说明: fdopen()会将参数fildes 的文件描述词,转换为对应的文件指针后返回

参数: mode 字符串则代表着文件指针的流形态,此形态必须和原先文件描述词读写模式相同。关于mode 字符串格式请参考fopen()。

返回值: 转换成功时返回指向该流的文件指针。失败则返回NULL,并把错误代码存在errno中。

2.4.6 feof(检查文件流是否读到了文件尾)

头文件: #include<cstdio>

函数声明: int feof(FILE * stream);

说明: feof()用来侦测是否读取到了文件尾,尾数stream为fopen()所返回之文件指针。如果已到文件尾则返回非零值,其他情况返回0。

返回值: 返回非零值代表已到达文件尾。 

2.4.7 fileno(返回文件流所使用的文件描述词)

头文件: #include<cstdio>

函数声明: int fileno(FILE * stream);

说明: fileno()用来取得参数stream指定的文件流所使用的文件描述词。

返回值: 返回文件描述词

2.4.8 freopen(打开文件)

头文件: #include<cstdio>

函数声明: FILE * freopen(const char * pathconst char * mode,FILE * stream);

说明: Freopen()会将原stream所打开的文件流关闭,然后打开参数path的文件。

参数: 

  • path 字符串包含欲打开的文件路径及文件名
  • mode 请参考fopen()说明
  • stream 为已打开的文件指针

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 文件操作 的相关文章

  • Java文件操作、IO流

    文章目录 1 File类1 1 File类概述和构造方法1 2 File类创建功能1 3 File类判断和获取功能1 4 File类删除功能 2 递归2 1 递归2 2 递归求阶乘2 3 递归遍历目录 3 IO流3 1 IO流概述和分类3
  • Hadoop之HDFS文件操作

    摘要 xff1a Hadoop之HDFS文件操作常有两种方式 xff0c 命令行方式和JavaAPI方式 本文介绍如何利用这两种方式对HDFS文件进行操作 关键词 xff1a HDFS文件 命令行 Java API HDFS是一种分布式文件
  • 文件操作

    文件操作 1 文件分类 xff1a 文本文件 xff08 例 xff1a 记事本 xff09 二进制文件 xff08 例 xff1a 视频文件 xff09 xff0c 优点 xff1a 所占内存较小 操作文件地址的两种方式 xff1a 相对
  • 基于linux下python的学习(文件操作、模块)

    一 文件操作 操作文件的函数 方法 在python中要操作文件需要记住的1个函数和3个方法 python中一切皆对象 open 打开文件 xff0c 并且返回文件操作对象 read 将文件内容读取到内存 write 将指定内容写入文件 cl
  • C++ 文件操作

    需要了解的概念 数据流 缓冲区 Buffer 文件类型 文件存取方式 借助文件指针读写文件 需要理解的知识点包括 xff1a 数据流 缓冲区 文件类型 文件存取方式 1 1 数据流 xff1a 指程序与数据的交互是以流的形式进行的 进行C语
  • C#文件操作

    在前面操作变量和常量时这些值都是存放到内存中的 xff0c 当程序运行结束后使用的数据全部被删除 若需要长久保存应用程序中的数据 xff0c 可以选用文件或数据库来存储 文件通常存放到计算机磁盘上的指定位置 xff0c 可以是记事本 Wor
  • io流读写文件(文件内容修改)

    package cn sos psasps import java io BufferedReader import java io BufferedWriter import java io FileReader import java
  • qt中设置文件保存的几种方式

    归纳总结4种qt常用的文件保存的方式 1 需要用到的头文件 include
  • qt操作文件进行读写操作

    一 加上头文件 include
  • 使用jxl解析Excel出现的问题

    jxl read biff BiffException Unable to recognize OLE stream at jxl read biff CompoundFile CompoundFile java 116 at jxl re
  • 自己动手写一个key value store

    一涉及到persistent 哪怕只是最基本的需求 很多人都会依赖数据库 或是其他现成的库或工具 确实 对于文件 大部分人很少直接打交道 或者只是诸如整体反序列化 序列化 按行读取 append new line等有限的操作 一个persi
  • java导入csv格式文件之身份证格式处理

    一 出现的问题 csv中的身份证号如下图 导到数据库中的结果 因此怎样导入才能使身份证能够正常导入呢 2 解决方案 第一步 选中身份证那一列 第二步 右键选择 设置单元格格式 第三步 数字列中 选择 特殊 gt 邮政编码 点击确定
  • C++ 修改/覆盖指定位置的文件内容或者从某个位置开始截断文件

    最新在进行文件方面的功能开发 遇到个这样的问题 1 文件读到中间 然后进行一些修改 2 然后将文件从修改后的地方截断 本以为这是个简单的操作 却花费了好大的功夫 网上并没有这样的例子 一通尝试 现在终于圆满解决了 特地记录一下 方便后来人
  • C语言入门第十九篇,文件操作

    文件操作是通过c语言编程实现对文本文件的控制 比如读入文件内容 处理文件内容等等 相信很多学校的学生在学习的时候老师就会叫大家用c语言做一个学生的成绩管理系统或者是什么的系统 如果不涉及到数据库 那多半是用文件来做 我们这篇主要讲文件的读出
  • LinuxC文件操作接口

    LinuxC文件操作接口 创建与删除 创建文件 FILE fopen const char filename const char mode int open const char pathname int flags mode t mod
  • 一个开发的记单词小程序

    这里写目录标题 效果演示 功能1测试 功能简介 代码实现 效果演示 输入1 敲下Enter 回车键 后 进入第一个功能英译汉 给出Hello 用户输入中文意思 你好 敲下回车确定 进入下一个单词 功能1测试 功能简介 1 分别编辑中文和英文
  • qt中复制文件的功能

    1 利用qt来复制文件 首先新建个工程文件 拖入按钮 复制文件 2 需要引入的头文件如下 include
  • springmvc上传文件的三种方式

    方式一 通过流的方式上传文件 RequestParam file 将name file控件得到的文件封装成CommonsMultipartFile 对象 RequestMapping fileUpload public String fil
  • excel文件拷贝

    package cn sos until import java io File import java io FileInputStream import java io FileOutputStream import java io I
  • TFS淘宝分布式文件核心存储引擎源码架构剖析实现

    这里写目录标题 相关背景介绍 相关设计思路介绍 项目基础 文件系统接口 扇区 文件结构 关于inode 为什么淘宝不用小文件存储 淘宝网为什么不用普通文件存储海量小数据 设计思路 关键数据结构哈希表 代码日志 mmp file h mmap

随机推荐

  • 国产信创Linux桌面系统比较:软件包格式及软件管理、桌面环境及桌面应用

    信创产业中 xff0c 操作系统开始整合 xff0c 基本上集中在银河麒麟V10和UOS2 xff0c 很多朋友问到各种国产信创Linux系统的区别和比较 因此结合前期写的几篇文章 xff0c 对这个问题再进行了整理 以龙芯CPU为例 xf
  • Date类型转换为字符串类型

    Date date 61 new Date SimpleDateFormat fmt 61 new SimpleDateFormat 34 yyyy MM dd HH mm ss 34 String dateStr 61 fmt forma
  • 《机关单位办公自动化应用指南 (基于国产信息技术应用创新终端)》与银河麒麟V10

    机关单位办公自动化应用指南 基于国产信息技术应用创新终端 一书适合各国产Linux桌面系统 xff0c 但是举例说明基本是基于中标麒麟V7 银河麒麟V10和中标麒麟V7都采用MATE桌面 xff0c 对于普通用户桌面操作而言差别不大 xff
  • NFS故障:Stale NFS file handle的解决一例

    故障描述 xff1a 一台备份一体机设备作为NFS服务端 xff0c export了目录 infokit exportnfs xff0c 从其他设备上挂载这个NFS 目录 xff0c 在NFS服务端和客户端及其上showmount e 都一
  • CentOS7部署nextcloud最新版本

    Nextcloud 是一个免费专业的私有云存储网盘 开源 项目 xff0c Nextcloud开发人员来自owncloud Nextcloud 跨平台支持 Windows Mac Android iOS Linux 等平台 xff0c 提供
  • SQL表间操作

    MySQL表间操作 近期需要对数据进行整理 xff0c 涉及多个安全产品的数据库 xff0c 基本都是MySQL的 xff0c 经常需要进行表的合并 整理操作 MySQL常见的求交集 并集和差集 1 select a b from tabl
  • ipref网络性能评估工具

    ipref网络性能评估工具 基本介绍 网络的主要性能参数包括带宽 xff0c 时延 xff0c 抖动和丢包率 xff0c 用一个名词就是QOS xff08 服务质量 xff09 Iperf xff08 可测丢包率 xff09 可以用来测量网
  • 抓取特定DNS查询包:tcpdump vs wireshark

    近期 xff0c 在办公网络中出现网络不稳定问题 xff0c 经过分析发现是网内大量的终端安装的安全软件 xff0c 每秒钟都定期进行地址探测 xff0c 其中需要探测taobao com之类的域名地址 xff0c 造成大量的DNS查询 x
  • ceph——数据修复/均衡速度测试

    以副本环境的数据均衡为例 xff0c 以下需要注意 xff1a 1 写入数据时 xff0c 用脚本监控写入数据量 xff08 ceph df xff09 到达预定值 xff0c 开始 停止cosbench cosbench支持命令行 进入c
  • iOS 卡顿、掉帧原因+优化

    卡顿 掉帧原因 VSync垂直信号 xff0c 一般说页面流畅是60fps xff0c 也就是每一秒钟会有60帧画面更新 xff0c 相当于16 7ms就要产生一帧画面 xff0c 那么在这16 7ms之内需要由CPU和GPU共同协同完成产
  • archlinux 安装virtualbox

    一 安装前准备 首先安装 linux headers sudo pacman S linux headers 其次确认linux内核的版本 uname r 如果和header的版本不一致 xff0c 需要更新内核 否则的话会在安装virtu
  • debian 切换默认桌面命令

    update alternatives config x session manager 选择gnome session
  • 解决windows系统80端口被占用问题_

    测试这个命令会把打印机共享等依赖http服务的程序停止 xff0c 导致共享无法使用 xff0c 所以还得寻找别的办法 xff0c 后来终于搜索到一条命令 netsh http show servicestate 1 这条命令可以查看到底是
  • Linux项目自动化构建工具---make/Makefile

    make Makefile 1 背景1 1 如何编写Makefile1 1 1 依赖关系1 1 2 依赖方法1 1 3 项目清理 2 Linux第一个小程序 进度条2 1 回车和换行概念2 2 行缓冲区概念2 3 完整的进度条代码和解析 1
  • IntelliJ Rider2020+Unity+EmmyLua调试的两种方式

    Rider2018 3 1版本中是可以直接附加Unity xff0c 很不错 xff0c 就是调试有几率崩溃 一直想升级到最新版来解决调试不稳定的问题 但将Rider2018 3 1更新到Rider2020 2 1后 xff0c EmmyL
  • Edge浏览器黑色背景设置

    1 打开Edge浏览器 xff0c 点击右上角的三个点 xff0c 选择 扩展 选项 xff0c 如下图 xff1a 2 搜索Dark Reader xff0c 点击 获取 3 点击开启 4 Edge浏览器 设置 外观 主体中选择雨夜模式
  • time(0) 是什么意思?

    time 0 返回的是系统的时间 xff08 从1970 1 1午夜算起 xff09 xff0c 单位 xff1a 秒 time 参数一般为0或者Null相当于 取系统时间 include lt iostream gt include lt
  • 函数指针、表驱动用法

    函数指针 xff08 1 xff09 函数指针含义 函数 在C语言中 xff0c 函数作为功能完成的基本单位 xff0c 它的定义如下 xff1a FunctionType FuncName ArgumentList FunctionBod
  • C++的Char traits模板类

    Char traits 头文件 Char traits h Generic char traits class Note that this class is provided only as a base for explicit spe
  • C++ 文件操作

    需要了解的概念 数据流 缓冲区 Buffer 文件类型 文件存取方式 借助文件指针读写文件 需要理解的知识点包括 xff1a 数据流 缓冲区 文件类型 文件存取方式 1 1 数据流 xff1a 指程序与数据的交互是以流的形式进行的 进行C语