简单⽂件操作(Linux下C++实现)
⼀.关于⽂件操作的⼏个基本函数
1.C函数库中⽂件操作函数
(1)fopen
函数原型:FILE* fopen(char *path, char *mode);
函数说明:打开⼀个⽂件。
(2)fgetc
函数原型:int fgetc(FILE *stream);
函数说明:从⽂件中读取⼀个字符。出错或⽂件尾返回EOF。
(3)fputc
函数原型:int fputc(int c, FILE *stream);
函数说明:将⼀个字符写⼊到⽂本⽂件中。
(4)fgets
函数原型:char* fgets(char *s, int size, FILE *stream);
函数说明:从⽂件中读取⼀⾏字符串(遇回车换⾏则函数返回)。如果为⽂件尾返回NULL。s表⽰要存储读取到数据的位置,size为s的⼤⼩。
(5)fputs
函数原型:int fputs(char *s, FILE *stream);
函数说明:将⼀⾏字符串写⼊到⽂件中。
(6)fprintf
函数原型:fsprintf(FILE *stream, const char *format, ...);
函数说明:格式化字符串到⽂件中。
(7)fread
函数原型:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
函数说明:按每多少个字节读取⽂件。ptr表⽰数据缓冲区,size表⽰每次读取的字节数,nmemb表⽰读取的次数,函数返回读取成功的次数,遇EOF结束读取返回0.
(8)fwrite
函数原型:size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
函数说明:按每多少个字节将数据写⼊到⽂件中。ptr表⽰数据缓冲区,size表⽰每次写⼊的字节数,nmemb表⽰写⼊的次数。
(9)fseek
函数原型:int fseek(FILE *stream, long offset, int whence);
函数说明:移动⽂件流的读写位置。whence的可取值:SEEK_SET(⽂件头)、SEEK_CUR(⽂件当前位置)、SEEK_END(⽂件尾).
(10)fclose
函数原型:int fclose(FILE *stream);
函数说明:关闭⼀个⽂件
2.Linux函数库中⽂件操作函数
(1)open
函数原型:int open(const char *pathname, int oflag, ...);
函数说明:打开⼀个⽂件。函数返回⽂件描述符fd。
(2)read
函数原型:size_t read(int fd, void *buf, size_t nbytes);
函数说明:按指定字节⼤⼩读取⽂件。如果函数执⾏成功,read返回⼀个⾮负数,表⽰本次操作实际读⼊的字节数。遇EOF失败返回-1. (3)write
函数原型:size_t write(int fd, void *buf, size_t nbytes);
函数说明:按指定字节⼤⼩写⼊⽂件。
(4)lseek
函数原型:off_t lseek(int fd, off_t offset, int whence);
函数说明:移动⽂件读写流的位置。
(5)close
函数原型:int close(int fd);
函数说明:关闭⼀个⽂件。
⼆.⽂件拷贝的三种⽅式
⽂件拷贝在以后的很多地⽅会⽤到,⽐如FTP⽂件传输、多线程下载等,所以熟练掌握⽂件拷贝的⼏种⽅式是以后学习的基础。⽂件拷贝的⼏种⽅式中,fgetc、fputc、fgets、fputs、fprintf只可以⽤来读写⽂本⽂件,它们读⼆进制⽂件会出现乱码。⽽read、write、fread、fwrite则都可以读写。值得注意的是,对⽂本⽂件的处理⼀般⽤fgets等函数。下⾯列出⽂件拷贝的三种实现⽅式(拷贝⽂本⽂件):
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
using namespace std;
int main(int argc, char *argv[])
{
if(access(argv[1], F_OK) != 0)
{
cout << "file " << endl;
return 0;
}
int fin = open(argv[1], O_RDONLY, 0777);
int fout = open(argv[2], O_WRONLY|O_CREAT, 0777);
char buff[1024] = {'\0'};
int len = 0;
while((len = read(fin, buff, sizeof(buff))) > 0)
{
write(fout, buff, len);
}
close(fin);
close(fout);
return 0;
}
/
/
#include <iostream>
#include <stdio.h>
using namespace std;
int main(int argc, char *argv[])
{
FILE *fp1;
fp1 = fopen(argv[1], "r");
FILE *fp2;
fp2 = fopen(argv[2], "w");
char buff[200] = {'\0'};
while(fgets(buff, sizeof(buff), fp1) != NULL)
{
fputs(buff, fp2);
}
fclose(fp1);
fclose(fp2);
return 0;
}
using namespace std;
int main(int argc, char *argv[])
{
FILE *fp1;
fp1 = fopen(argv[1], "r");
FILE *fp2;
fp2 = fopen(argv[2], "w");
char buff[1024] = {'\0'};
int count = 0;
while((count = fread(buff, 1, 1024, fp1)) != 0) {
fwrite(buff, 1, count, fp2);
}
fgets和fgetc的区别fclose(fp1);
fclose(fp2);
return 0;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论