-
2022-04-25 02:14:52
将几行文本写入TXT文件。 然后编写一个函数,将第一个文件的内容“复制”到一个新文件中。
def copyfile(f1,f2): content=f1.read() f2.write(content) f1.close()#关闭文件 f2.close() return ; #1.写入信息 message ="Hello" file1=open('test1.txt',mode='w',encoding='utf-8')#打开所需要写入的test1.txt文本 file1.write(message)#写入信息 file1.close();#关闭文件 #2.调用函数进行复制 file1=open('test1.txt',mode='r',encoding='utf-8')#用读取方式打开test1.txt文本 file2=open('test2.txt',mode='w',encoding='utf-8')#用写入方式打开test2.txt文本 test2.txt是需要复制的文件夹 copyfile(file1,file2)
更多相关内容 -
C语言利用fgetc和fputc函数实现文件的复制
2020-02-02 16:25:08要求:利用fgetc和fputc函数实现文件的复制 分析:使用指定函数实现指定功能。所以这里问题就简单化,我们弄明白fgetc和fputc两个函数如何使用即可。 函数原型 函数介绍 int fgetc(FILE *stream) 从指定的...要求:利用fgetc和fputc函数实现文件的复制
分析:使用指定函数实现指定功能。所以这里问题就简单化,我们弄明白fgetc和fputc两个函数如何使用即可。
函数原型 函数介绍 int fgetc(FILE *stream) 从指定的流 stream 获取下一个字符(一个无符号字符),并把位置标识符往前移动。 函数成功读取时返回读取的字符,若到文件末尾或者出错时返回EOF int fputc(int char, FILE *stream) 把参数 char 指定的字符(一个无符号字符)写入到指定的流 stream 中,并把位置标识符往前移动。 函数成功写入数据时,返回写入的字符,出错时返回EOF 这里面的流就是数据的意思,我们需要注意的是,对流进行操作,也就是对文件进行操作时,需要先打开文件,执行完程序后,还需要及时关闭文件,以免发生不可避免的错误。这里还有一个特别的地方,就是对一个文件进行度操作或者写操作的时候,文件指针会自动移位,若是想回到文件头需要我们自己处理。
这里引入了一个新的问题,打开和关闭文件,这里我们需要使用到fopen和fclose函数。
fopen函数:
函数原型 函数介绍 FILE *fopen(const char *filename, const char *mode) 使用给定的模式 mode 打开 filename 所指向的文件。 filename:指定打开的文件 mode:打开文件的方式 成功打开时返回流指针,出错时返回NULL mode参数具体介绍:
" r " 以只读的方式打开文件,文件必须存在 " r+ " 以读写的方式打开文件,文件必须存在 " w " 以只写的方式打开文件,若文件存在则文件长度清除。若文件不存在则创建 " w+ " 以读写方式打开文件,其他等同“ w ” " a " 以只写方式打开文件,若文件不存在则创建,向文件写入数据时是追加到文件末尾 " a+ " 以读写方式打开文件,其他等同“ a ” fclose函数:
函数原型 函数介绍 int fclose(FILE *stream) 关闭流 stream。刷新所有的缓冲区。 如果流关闭成功返回0,若失败返回EOF
实现代码如下:
#include <stdio.h> #include <stdlib.h> int main(int argc, const char *argv[]) { FILE *fpin, *fpout; char ch; fpin = fopen(argv[1], "r"); //只读方式打开第一个文件 fpout = fopen(argv[2], "w"); //只写方式打开第二个文件 while((ch = fgetc(fpin)) != EOF) //循环读取第一个文件,直到文件为空 { putc(ch, fpout); } fclose(fpin); fclose(fpout); return 0; }
代码测试:
linux@linux:~/Review_Linux$ gcc -c test.c -Wall linux@linux:~/Review_Linux$ ./a.out file1.txt file2.txt
下面两图可见,file2.txt成功创建,并且其内容与file1.txt一致,要求功能实现成功。
这里我们是使用fgetc和fputc函数每次读取/写入一个数据来实现文件的复制。
我们还可以使用fgets和fputs函数,每次读取/写入一行来实现文件的复制。
函数原型 函数介绍 char *fgets(char *str, int n, FILE *stream) 从指定的流 stream 读取一行,并把它存储在 str 所指向的字符串内。当读取 (n-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。 str:指向一个字符数组的指针,该数组存储了要读取的字符串 n:要读取的最大字符数(包括最后的空字符),通常是使用以 str 传递的数组长度 stream:指向 FILE 对象的指针,该 FILE 对象标识了要从中读取字符的流
函数成功读取返回str,若到了文件末尾或是出错时返回NULL int fputs(const char *str, FILE *stream) 把字符串写入到指定的流 stream 中,但不包括空字符。 str:指向一个字符数组的指针,该数组存储着要写入的字符串 stream:指向 FILE 对象的指针,该 FILE 对象标识了要被写入字符串的流。 函数成功写入时返回写入字符个数,失败返回EOF 再或者我们还可以使用fread和fwrite函数,每次读取/写入指定长度数据,实现文件复制。
函数原型 函数介绍 size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream) 从给定流 stream 读取数据到 ptr 所指向的数组中。 ptr:指向一个字符数组的指针,该数组存储了要读取的字符串 size:读取元素的大小,按字节为单位 nmemb:读取元素的个数,元素的长度为size字节 stream:指向 FILE 对象的指针,该 FILE 对象指定了一个输入流 函数成功读取返回读取个数,失败则返回EOF size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream) 从给定流 stream 读取数据到 ptr 所指向的数组中。 ptr:指向一个字符数组的指针,该数组存储了要写入的字符串 size:写入元素的大小,按字节为单位 nmemb:写入元素的个数,元素的长度为size字节 stream:指向 FILE 对象的指针,该 FILE 对象指定了一个输出流 函数成功写入返回写入个数,失败则返回EOF 仓促成文,不当之处,尚祈方家和读者批评指正。联系邮箱1772348223@qq.com
-
【Linux系统IO函数】read、write函数及实现文件拷贝
2022-03-24 10:39:25Linux系统—read、write函数 ssize_t read(int fd, void *buf, size_t count);...实现文件拷贝: 1.1 read函数 输入以下命令查看函数帮助文档: man 2 read/write #include <unistd.h> ssize_t read(int fd, vLinux系统—read、write函数
ssize_t read(int fd, void *buf, size_t count); //将文件中的数据读入内存 ssize_t write(int fd, const void *buf, size_t count); //把内存中的数据写入到文件里
实现文件拷贝:
1.1 read函数
输入以下命令查看函数帮助文档:
man 2 read/write
#include <unistd.h> ssize_t read(int fd, void *buf, size_t count);
- 参数:
- fd: 文件描述符,open得到的,通过这个文件描述符操作某个文件
- buf:需要读取数据存放的地方,数组的地址(传出参数)
- 传出参数:传入一个空的数组进去,函数将内容保存到数组后,可以通过数组取数据
- count:指定的数组的大小
- 返回值:
- 成功:
- >0:返回实际的读取到的字节数
- =0:文件已经读取完了
- 失败:返回-1,并且设置errno
- 成功:
1.2 write函数
#include <unistd.h> ssize_t write(int fd, const void *buf, size_t count);
- 参数:
- fd:文件描述符,open得到,通过文件描述符操作某个文件
- buf:要往磁盘写入的数据
- count:要写的数据的实际的大小
- 返回值:
- 成功:返回实际写入的字节数
- 失败:返回-1,并设置合适的errno
1.3 实现文件拷贝
编写copyfile.c:
#include <unistd.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int main() { // 1. 通过open打开english.txt文件,只读 int srcfd = open("english.txt", O_RDONLY); if(srcfd == -1) { perror("open"); return -1; } // 2. 创建一个新的文件(拷贝文件),只写 int destfd = open("cpy.txt", O_WRONLY | O_CREAT, 0664); if(destfd == -1) { perror("open"); return -1; } // 3. 频繁的读写操作 // 创建缓冲区 char buf[1024] = {0}; int len = 0; while(( len = read(srcfd, buf, sizeof(buf)) ) > 0 ) { // 每读一次数据,就写入到拷贝文件中 write(destfd, buf, len); } // 4. 关闭文件 close(srcfd); close(destfd); return 0; }
在终端中GCC编译并运行,得到拷贝文件cpy.txt
fuerer@fuerer-virtual-machine:~/Linux/lesson10$ ls copyfile.c english.txt fuerer@fuerer-virtual-machine:~/Linux/lesson10$ gcc copyfile.c -o copy fuerer@fuerer-virtual-machine:~/Linux/lesson10$ ls copy copyfile.c english.txt fuerer@fuerer-virtual-machine:~/Linux/lesson10$ ./copy fuerer@fuerer-virtual-machine:~/Linux/lesson10$ ll 总用量 280 drwxrwxr-x 2 fuerer fuerer 4096 3月 24 10:31 ./ drwxrwxr-x 11 fuerer fuerer 4096 3月 24 10:02 ../ -rwxrwxr-x 1 fuerer fuerer 8528 3月 24 10:31 copy* -rw-rw-r-- 1 fuerer fuerer 1792 3月 24 10:31 copyfile.c -rw-rw-r-- 1 fuerer fuerer 129772 3月 24 10:31 cpy.txt -rw-rw-r-- 1 fuerer fuerer 129772 3月 24 10:21 english.txt
cpy.txt与english.txt大小均为 129772 个字节
- 参数:
-
c语言实现文件的复制
2020-02-07 11:52:43c语言实现文件的复制 我最近学习到一个关于c语言复制的函数,自己参照别人的例子做了一点小修改,在此拿来作为自己的第一篇博客。 直接上代码吧: 下面五个参数是文件复制函数要用到的,在此说明它们的作用 file...我最近学习到一个关于c语言复制的函数,自己参照别人的例子做了一点小修改,在此拿来作为自己的第一篇博客。
直接上代码吧:
下面五个参数是文件复制函数要用到的,在此说明它们的作用
filesource 复制的源文件
sourceoffset 复制的起点 相对于文件开头
length 复制的长度 为小于0 时全部复制
filetarget 要复制到的目标文件
targetoffset 复制到目标文件的哪里 (相对于目标文件的开头)long FileCoppy(FILE *filesource ,long sourceoffset, long length,FILE *filetarget,long targetoffset ) { int BufferLen =1024*4; // 缓冲区的长度 char *mbuffer=(char*)malloc(BufferLen); // 开辟缓冲区 int freadcount=0; // 调用fread()函数读取到的字节数 long sumbytes=0; // 总共复制的字节数 int fread_sum=0; // fread() 函数的调用次数 int i; // 循环变量 fseek(filesource,sourceoffset,SEEK_SET); // 将源文件文件指针移动到要复制的起点 fseek(filetarget,targetoffset,SEEK_SET); // 将目标文件的文件指针移动到要插入内容的的起点 if(length<0) { while((freadcount=fread(mbuffer,1,BufferLen ,filesource))>0) { sumbytes+=freadcount; fwrite(mbuffer,freadcount,1,filetarget);// 将缓冲区里的内容写到目标文件 } } else // 复制length个字节的内容 { fread_sum=(int)ceil((double)((double)length/BufferLen)); for(i=1;i<=fread_sum;i++) { if(length-sumbytes<BufferLen) // 读取的数据小于读取长度时 { BufferLen=length-sumbytes; } freadcount=fread(mbuffer,1,BufferLen,filesource); // 读取的数据大于读取长度时 fwrite(mbuffer,freadcount,1,filetarget); // 将读取到的数据写到目标文件 sumbytes+=freadcount; } } fflush(filetarget); free(mbuffer); return sumbytes; }
函数的最后返回值时文件复制的字节数。
需要注意的是要先在你的源文件目录下面创建一个源文件,我创建的是test.txt, 目标文件可以在运行的时候写 会自动生成,文件的后缀记得写哈。
完整的代码如下:#include <stdio.h> #include <stdlib.h> #include<math.h> long FileCoppy(FILE *filesource ,long sourceoffset, long length,FILE *filetarget,long targetoffset ); int main() { char source[60]; // 储存源文件的文件名 char target[60]; // 存储目标文件的文件名 long filesize=0; // 获取文件的复制字节数 printf("要复制的文件:"); // 获取用户输入 scanf("%s", source); printf("将文件复制到:"); // 获取用户输入 scanf("%s", target); FILE *filesource=fopen(source,"rb"); FILE *filetarget=fopen(target,"wb+"); if(filesize= FileCoppy(filesource,0 ,-1,filetarget,0)) { printf("恭喜你,文件复制成功!\n"); printf("复制了%ld个字节\n",filesize); } else printf("文件复制失败!\n"); return 0; } long FileCoppy(FILE *filesource ,long sourceoffset, long length,FILE *filetarget,long targetoffset ) { int BufferLen =1024*4; // 缓冲区的长度 char *mbuffer=(char*)malloc(BufferLen); // 开辟缓冲区 int freadcount=0; // 调用fread()函数读取到的字节数 long sumbytes=0; // 总共复制的字节数 int fread_sum=0; // fread() 函数的调用次数 int i; // 循环变量 fseek(filesource,sourceoffset,SEEK_SET); // 将源文件移动到要复制的起点 fseek(filetarget,targetoffset,SEEK_SET); // 将目标文件移动到要插入内容的的起点 if(length<0) { while((freadcount=fread(mbuffer,1,BufferLen ,filesource))>0) { sumbytes+=freadcount; fwrite(mbuffer,freadcount,1,filetarget);// 将缓冲区里的内容写到目标文件 } } else // 复制length个字节的内容 { fread_sum=(int)ceil((double)((double)length/BufferLen)); for(i=1;i<=fread_sum;i++) { if(length-sumbytes<BufferLen) // 读取的数据小于读取长度时 { BufferLen=length-sumbytes; } freadcount=fread(mbuffer,1,BufferLen,filesource); // 读取的数据大于读取长度时 fwrite(mbuffer,freadcount,1,filetarget); // 将读取到的数据写到目标文件 sumbytes+=freadcount; } } fflush(filetarget); free(mbuffer); return sumbytes; }
测试截图如下:
第一次写文章,没什么经验,就简陋一点了,希望对你有帮助。 -
6-3 使用函数实现字符串部分复制 (15 分)
2019-06-03 17:38:126-3 使用函数实现字符串部分复制 (15 分) (PTA练习题) 题干: ** 本题要求实现一个在数组中查找指定元素的简单函数。 函数接口定义: int search( int list[], int n, int x ); 其中list[]是用户传入的数组;n(≥0... -
C函数:文件移动、复制、重命名和删除
2018-06-13 19:46:511、要实现一个目录下的文件被移动到另外的目录Windows API :BOOL WINAPI MoveFile( _In_ LPCTSTR lpExistingFileName, _In_ LPCTSTR lpNewFileName ); 功能:Moves an existing file or a directory, including... -
Qt5.9拷贝文件(复制文件)函数封装和总结(核心函数:QFile::copy())
2018-07-31 19:38:46本文主要总结用Qt5.9封装一个函数,该函数的功能是拷贝源目录下的文件到指定目录下,具体的定义如下所示: void copyFiltTo(QString sourcePath,QString destPath, QStringList fileType); 其中,sourcePath表示... -
c语言实现文件移动\复制\重命名\删除等函数
2018-02-02 11:36:051.复制文件,定义与调用用例 BOOL WINAPI CopyFile( __in LPCTSTR lpExistingFileName, __in LPCTSTR lpNewFileName, __in BOOL bFailIfExists );//CopyFile(srcfilepath, dstfilepath, 0 -
C语言模拟实现(四)-----利用open、read、write等系统调用函数实现cp(文件复制)功能
2018-12-19 18:23:07话不多说,直接上代码! #include #include #include #include #include #include #include int main(int argc,char* argv[]){ int fd,fd1,fd2;... } }else{ printf("要复制的文件不存在\n"); } } return 0; } -
使用标准io实现文件复制功能
2016-08-30 19:49:35 -
Python实现文件的复制粘贴
2021-03-18 15:24:01用 Python 复制文件的 9 种方法具体是: shutil copyfile() shutil copy() shutil copyfileobj() shutil copy2() os popen() os system() threading Thread() subprocess call() subprocess check_output() ... -
Linux下的C语言编程——系统调用read和write函数实现文件拷贝
2016-11-14 22:32:41系统调用read和write函数实现文件拷贝 #include #include #include #include #include #include #define SIZE 1024 int main() { int from_fd; int to_fd; int nread; int nwrite; char buff... -
linux文件-link函数(文件硬链接和软连接)
2018-08-25 00:06:23创建硬链接的函数: 相关函数:symlink, unlink 头文件:#include &...函数说明:link函数中oldpath指定已经存在文件,newpath指定的名称建立一个新的连接(硬链接),若是newpath指定的文件已存在则不会... -
Linux详解之用三个文件实现复制文件内容功能
2017-03-19 16:40:01要求在命令行输入两个文件名即可实现把第一个文件复制到第二个新文件中,其中mycp函数的要求是mycp(char *src, char *dest),*src是源文件路径,*dest是目标文件路径。知识点:1.Linux系统编程之错误处理:perror , ... -
C语言文件操作函数大全
2018-01-19 20:35:35C语言文件操作函数大全 2018-1-19 13.1C语言文件 1,两种文件存取方式(输入,输出方式) 顺序存取 直接存取 2,数据的两种存放形式 文本文件 二进制文件 13.2文件指针 定义文件类型指针变量的一般... -
【C语言】之实现文件复制功能
2018-03-19 18:35:58* 功能描述:实现文件的复制功能-linux平台下 * 编写人:王廷云 * 编写日期:2018-1-12 */ #include <stdio.h> #include <stdlib.h> #define BUFFSIZE 1024 // 缓冲区大小 /* 程序... -
Halcon本地程序函数、函数文件及库函数使用详解
2019-08-05 14:29:22将可以实现某一个功能的一系列算子打包成一个函数,其作用域只是当前程序,不可被其它程序使用,该函数称为本地程序函数。当程序过于庞大时,通过将各个功能模块打包成本地函数的方式,可以使算法逻辑更加清... -
如何在Excel 中使用IF函数
2021-07-28 07:56:51如何在Excel 中使用IF函数腾讯视频/爱奇艺/优酷/外卖 充值4折起有的小伙伴在使用Excel软件时,为了快速检查成绩或者其他物品是否合格,需要使用if函数,但是却不知道如何使用,那么小编就来为大家介绍一下吧。... -
C语言编程序,实现文本文件的复制
2020-01-05 15:57:15C语言编程序,实现文本文件的复制 将source.txt文件复制到target.txt文件中。文件内容如下: When you are old and grey and full of sleep, 当你老了,头发花白,睡意沉沉, And nodding by the fire,take down ... -
使用腾讯云函数每天定时签到领取京豆
2021-08-25 16:03:06复制application里pt_key和pt_pin的cookies值 把上面两个cookie的值填到文件 jdCookie.js ,支持支持多账号,每行填一个账号的cookie值 可以设置公众号消息接收通知,支持server酱,钉钉机器人,企业微信机器人和... -
使用FileInputStream和FileOutputStream实现文件的复制
2015-07-17 10:49:42从上图中我们可以看到FileInputStream和FileOutputStream建立起了文件和内存的单行道。FileInputStream只能将数据从外存读到内存,FileOutputStream只能从内存将数据读到外存。 根据他们的特点我写了一个 -
C语言system函数使用
2019-11-08 19:09:18函数原型 包含在头文件 “stdlib.h” 中 int system(const char * command) 函数功能 执行 dos(windows系统) 或 shell(Linux/Unix系统) 命令,参数字符串command为命令名。另,在windows系统下参数字符串不区分... -
MFC中实现文件的复制粘贴、剪切功能
2019-03-20 16:14:021.文件的复制粘贴: 函数:BOOL CopyFile(LPCTSTR lpExistingFileName,LPCTSTR lpNewFileName, BOOL bFailIfExists); 实例:CopyFile( "d:\1.txt ", "e:\1.txt ",FALSE); 2.文件的剪切粘贴: 函数:BOOL MoveFile( ... -
windows下实现fcntl函数功能
2019-11-28 17:30:22fcntl函数是linux下的一个文件锁函数,用以加密文件,给文件上锁,防止文件同时被多个进程操作。 我遇到的主要是这两个: fcntl.flock(f, fcntl.LOCK_EX) fcntl.flock(f, fcntl.LOCK_UN) 但是在windows下执行时发现... -
linux下利用C语言实现对文件的操作(创建、复制、修改权限、修改文件名)
2020-06-07 12:41:34今天在ubuntu下编写一个了C程序实现如下功能: (1)创建一个文本文件,写入“Hello World!” (2)获取该文件的所有权限 (3)把该文件改为只读 (4)修改该文件的文件名 C语言chmod()函数:修改文件权限 ... -
Java利用File类实现copy复制操作
2021-09-17 19:56:15在熟悉io流后,我们利用io实现文件的复制 public static void copy(File oldFile, File newFile){ try ( InputStream in = new FileInputStream (oldFile); OutputStream out = new FileOutputStream ( newFile ... -
C++ 实现文件的复制和移动
2017-02-26 19:44:18想实现一个文件的复制和移动的函数,来处理文件,可惜电脑上面没有安装Matlab,就想用 C++ 来实现这个功能。分别使用 C 里面的 rename 函数和 C++ 中的 stream 来实现。rename 就是简单的修改文件名,如果文件路径... -
Python文件操作(I/O):相关函数
2021-02-22 07:39:48关于文件的路径和相关函数Python文件操作(I/O):相关函数一.read()函数UnicodeDecodeError异常二.readline()和readlines()函数readline()函数readlines()函数三.for循环读取文件四.write()和writelines()函数write... -
c语言回调函数的使用及实际作用详解
2021-07-16 23:49:20很多人即使知道怎么写回调函数也根本就搞不懂它们在实际产品中也有什么用,什么时候用。 所以这节课呢我们会以程序架构的需求为出发点,讲解回调函数是怎么满足它这个需求的。 为了方便大家理解,这篇内容也对应有... -
14-Qt中为什么函数可以直接返回QString对象而不是QString*(指针),复制构造函数的作用
2019-10-21 10:23:14Qt中为什么函数可以直接返回QImage/QString对象,而不是QImage* QString*(指针) 副标题:C++编程中使用List<Object*>还是List<Object>呢 ? 注:本文涉及到的主要知识点为:C++的复制构造函数的作用 ...