文件编辑

背景知识

  文件系统是操作系统中负责存取和管理信息的模块,它用统一的方式管理用户和系统信息的存储、检索、更新、共享和保护,并为用户提供一整套方便有效的文件使用和操作方法。文件这一术语不但反映了用户概念中的逻辑结构,而且和存放它的辅助存储器(也称文件存储器)的存储结构紧密相关。所以,同一个文件必须从逻辑文件和物理文件两个侧面来观察它。

  对于用户来说,可按自己的愿望并遵循文件系统的规则来定义文件信息的逻辑结构,由文件系统提供“按名存取”来实现对用户文件信息的存储和检索。可见,使用者在处理他的信息时,只需关心所执行的文件操作及文件的逻辑结构,而不必涉及存储结构。但对文件系统本身来说,必须采用特定的数据结构和有效算法,实现文件的逻辑结构到存储结构的映射,实现对文件存储空间和用户信息的管理,提供多种存取方法。例如,用户希望与具体的存储硬件无关,使用路径名、文件名、文件内位移就可以进行数据(字节、字段或记录)的读、写、改、删操作;而作为实现这些功能的文件系统来说,它的工作与存储硬件紧密相关,是根据用户的文件操作请求,转化为对设备(磁盘)上的信息按照所在的位置(设备号、柱面号、磁道号和物理块号)进行寻址、读写和控制。所以,文件系统的功能就是要在逻辑文件与物理文件、逻辑地址与物理地址、逻辑结构与物理结构、逻辑操作与物理操作之间实现转换,保证存取速度快、存储空间利用率高、数据可共享、安全可靠性好。

  文件系统的基本功能之一是负责文件目录的建立、维护和检索,要求编排的目录便于查找、防止冲突,目录的检索方便迅速。由于文件目录也需要永久保存,所以,把文件目录也组织成文件存放在磁盘上称目录文件。有了文件目录后,就可实现文件的“按名存取”。当用户要求存取某个文件时,系统查找文件目录并比较文件名就可找到所寻文件的文件控制块(文件目录项)。然后,再通过文件目录项指出文件的文件信息相对位置或文件信息首块物理位置等就能依次存取文件信息。

1、文件创建

任务描述:

  • 输入要创建的文件名,输出是否创建成功信息

相关知识:

  • FILE *fopen(const char *path, const char *mode):创建文件

    fopen函数打开一个文件,文件名由函数参数path给出。参数mode指向一个字符串,字符串中包含着访问文件的方式,具有有:

    “r”: 以只读方式打开文件,该文件必须存在。

    “w”: 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。

    “r+”: 以可读写方式打开文件,该文件必须存在。

    “w+”: 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。

    “a”: 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。

    “a+”: 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。

    如果打开文件成功,则fopen函数返回一个指向FILE结构体的指针,否则返回NULL,并把错误代码存在errno中。

    FILE是个结构体,包含了管理文件流所需的各个信息,包括文件描述符,指向缓冲区的指针等。

    使用w,w+,或a+,都可以创建一个文件。

  • int fclose(FILE* stream):使用fclose函数来关闭fopen打开的文件流关闭一个流,可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区。

main.c:

#include<stdio.h>
#include<stdlib.h>
int main(int argc,char *argv[])
{
    FILE *fp;
    if(argc!=2){
        perror("argc error\n");
        exit(1);
    }
    fp=fopen(argv[1],"w");
    if(fp==NULL){
        perror("fopen fail\n");
        exit(1);
    }
    else
        printf("create success\n");
    fclose(fp);

    return 0;
}

2、文件写

任务描述:

  • 输入文件名及要写入文件的字符串
  • 每次需要在原有文件内容基础上追加写入

相关知识:

  • size_t fwrite(void *ptr, size_t size, size_t nmemb, FILE *stream):向文件中写入数据      

    ptr:用于获取数据的地址(指针)

    size:单个元素的大小,单位是字节

    nmemb:元素个数

    stream:提供数据的文件指针

    函数返回写入文件的元素的个数

main.c:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc,char *argv[])
{
    FILE *fp;
    char str[20]={‘\0‘};

    if(argc!=3){
        perror("argc error\n");
        exit(1);
    }
    fp=fopen(argv[1],"a+");
    if(fp==NULL){
        perror("fopen fail\n");
        exit(1);
    }
    strcpy(str,argv[2]);
    fwrite(str,1,strlen(str),fp);
    fclose(fp);

    return 0;
}

3、文件读

任务描述:

  • 命令行中以文本文件名做输入参数,打印文件中内容

相关知识:

  • size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream):从文件中读取数据    

    ptr:用于接收数据的地址(指针)
    size:单个元素的大小,单位是字节
    nmemb:元素个数
    stream:提供数据的文件指针

    返回值:读取的元素的个数

main.c:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main(int argc,char *argv[])
{
    FILE *fp;
    char str[20]={‘\0‘};
    //memset(str,‘\0‘,20);
    if(argc!=2){
        perror("argc error\n");
        exit(1);
    }

    fp=fopen(argv[1],"r");
    if(fp==NULL){
        perror("fopen fail\n");
        exit(1);
    }
    printf("The text in file is:");
    fread(str,1,20,fp);
    printf("%s",str);
    fclose(fp);

    return 0;
}

4、文件的重命名

任务描述:

  • 输入文件名以及新文件名,输出是否成功命名文件

相关知识:

  • int rename(const char *old_filename, const char *new_filename):对文件进行重命名    

    old_filename: 包含将要被重命名的文件的原始名称。

    new_filename:新的文件名称。

main.c:

#include<stdio.h>
#include<stdlib.h>

int main(int argc,char *argv[])
{int a;
    if(argc!=3){
        perror("argc error\n");
        exit(1);
    }

    a=rename(argv[1],argv[2]);
    if(a==-1){
        perror("rename error\n");
        exit(1);
    }
    else
        printf("rename success\n");

    return 0;
}

5、文件另存为

任务描述:

  • 将已有文件另存为一个新的文件
  • 综合文件的创建和读写操作

main.c:

#include<stdio.h>
#include<stdlib.h>

int main(int argc,char *argv[])
{
    FILE *fp1,*fp2;
    int n;char str[512];

    if(argc!=3){
        perror("argc error\n");
        exit(1);
    }
    fp1=fopen(argv[1],"r");
    if(fp1==NULL){
        perror("fopen1 fail\n");
        exit(1);
    }
    fp2=fopen(argv[2],"w");
    if(fp2==NULL){
        perror("fopen2 fail\n");
        exit(1);
    }

    n=fread(str,1,20,fp1);
    if(n==-1){
        perror("save fail\n");
        exit(1);
    }
    else{
        fwrite(str,1,n,fp2);
        printf("save success\n");
    }
    fclose(fp1);
    fclose(fp2);

    return 0;
}

6、文件的删除

任务描述:

  • 输入要删除的文件名,输出是否删除成功的信息

相关知识:

  • int remove(const char *filename):删除文件

main.c:

#include<stdio.h>
#include<stdlib.h>

int main(int argc,char *argv[])
{
    FILE *fp1;int n;
    if(argc!=2){
        perror("argc error\n");
        exit(1);
    }
/*
    fp1=fopen(argv[1],"r");
    if(fp1==NULL){
        perror("fopen1 fail\n");
        exit(1);
    }
*/
    n=remove(argv[1]);
    if(n!=0){
        perror("removr error\n");
        exit(1);
    }
    else
        printf("remove success\n");
//    fclose(fp1);

    return 0;
}
时间: 2024-08-08 01:22:08

文件编辑的相关文章

Fedora 25 (linux平台)开源的PDF文件编辑工具——PDF mod

Fedora 25 (linux平台)开源的PDF文件编辑工具--PDF mod PDF文件具有非常好的跨平台属性,无论你在哪个平台用哪个PDF阅读器打开,其格式是永远不变的.但是缺点也很明显,文本文件或者图文混排文件,要想再次编辑就有很大难度了. Document viewer作为fedora 25默认PDF阅读器,用来阅读PDF文件没什么大问题,但是如果要修改一下PDF就显得不够强大了. PDF Mod是一款编辑 PDF 文件很方便的工具.包名:pdfmod PDF Mod 让用户可以移除页

微擎文件编辑SQL注入

漏洞名称:微擎文件编辑SQL注入 补丁文件:/web/source/site/article.ctrl.php 补丁来源:阿里云云盾自研 漏洞描述:微擎的/web/source/site/article.ctrl.php中对$_GPC['template'].$_GPC['title'].$_GPC['description'].$_GPC['source'].$_GPC['author']参数未进行正确转义过滤,导致SQL注入的产生 解决方法 搜索代码 message('标题不能为空,请输入标

Linux-vim文件编辑命令小技巧

Linux-vim文件编辑异常问题处理 问题说明: 每次复制代码时,如果代码里有 //或# 这样的注释就容易让格式乱掉,显示的内容不整齐,并不是所期望的显示格式. 原因分析: 是由于vim编辑命令的自动缩进功能所影响,因此粘贴带注释的代码时可以取消自动缩进 问题解决: vim在粘贴代码时会自动缩进,把代码搞得一团糟糕,甚至可能因为某行的一个注释造成后面的代码全部被注释掉:最初的解决办法为:用vi去打开文件再粘贴上去,但其实是可以对vim编辑器进行设置修改的.  vim oldboy.txt   

2015/5/8 eclipse中jsp、js文件编辑时卡死怎么办?

eclipse中jsp.js文件编辑时卡死怎么办? 使用Eclipse编辑jsp.js文件时,经常出现卡死现象,通过以下几个调整来解决: 1.取消验证 Windows->Perferences->Validation,把除了manual 下面的全部点掉,build下只保留 classpath dependency Validator: 2.关闭拼写检查: Windows–>Perferences–>General–> Editors->Text Editors->

pdf文件编辑

下载软件:Foxit PDF Editor,这个工具挺好用的,可以对pdf文件内容进行编辑 Foxit PDF Editor 是第一个真正的PDF文件编辑软件.许多人都希望能找到一个象编辑其它类型的文档的编辑器,事实上在 Foxit PDF Editor 出现之前,根本没有这样的工具.每一个PDF 文件都包含很多页面,每一页包含各种可视对象,如文本对象.图形对象和图像对象.而每一个对象都由其属性来定义其显示的方式. 第一步:打开要编辑的pdf文件: 注:按住Ctrl键可以同时选择多个文字. 第二

Linux:多文件编辑

多文件编辑 1.使用vim编辑多个文件 编辑多个文件有两种形式,一种是在进入vim前使用的参数就是多个文件.另一种就是进入vim后再编辑其他的文件. 同时创建两个新文件并编辑 $ vim 1.txt 2.txt 默认进入1.txt文件的编辑界面 命令行模式下输入:n编辑2.txt文件,可以加!即:n!强制切换,之前一个文件的输入没有保存,仅仅切换到另一个文件 命令行模式下输入:N编辑1.txt文件,可以加!即:N!强制切换,之前文件内的输入没有保存,仅仅是切换到另一个文件 2.进入vim后打开新

vim 多文件编辑【超实用】

vim 多文件编辑(偶的linux笔记) http://blog.csdn.net/lcj_cjfykx/article/details/18805721 通过vim打开的每个文件都对应着一个buffer(buffer是系统为打开的文件分配的内存空间),每个buffer都有一个id. 1. 在同一窗口下显示多个文件 命令:vim filename1 filename2 :n    切换到下一个文件 :N   切换到上一个文件 :n filename2   切换到文件filename2 :ls 

ArcGIS符号库serverstyle文件编辑注意事项

当写程序对serverStyle文件进行编辑的时候 ,必须注意以下几条: 1.只使用IStyleGallery接口是无法修改serverstyle的,必须用IStyleGalleryStorage接口且指定targetFile属性.暂且理解为一种保护措施吧,原文件只读不写,targetFile所指定的临时文件可进行写入操作. 2.指定临时文件后本人AddItem多次仍不成功,经过反复测试,结论为本人所要修改的serverStyle文件太老旧的缘故,与当前使用的ArcGIS10.1平台不符.于是将

FFmpeg命令行工具和批处理脚本进行简单的音视频文件编辑

FFmpeg_Tutorial FFmpeg工具和sdk库的使用demo 一.使用FFmpeg命令行工具和批处理脚本进行简单的音视频文件编辑 1.基本介绍 对于每一个从事音视频技术开发的工程师,想必没有一个人对FFmpeg这个名称感到陌生.FFmpeg是一套非常知名的音视频处理的开源工具,它包含了开发完成的工具软件.封装好的函数库以及源代码供我们按需使用.FFmpeg提供了非常强大的功能,可以完成音视频的编码.解码.转码.视频采集.后处理(抓图.水印.封装/解封装.格式转换等),还有流媒体服务等

Linux系统运维笔记(二),Linux文件编辑命令

Linux系统运维笔记 Linux文件编辑命令 首先我们使用命令 vi filename 打开一个文件,这个时候进入到的是命令模式 接下来我们按i,然后键盘随便输入写内容. 然后按ESC重新进入到命令模式. 在命令模式的情况下,我们按:,进入到了末行模式. 输入wq!,然后回车,强行保存退出. q! [强制退出不保存]q[退出不保存]wq[退出并保存后面也可以加个!] vi /etc/centos-release 查看centos系统版本 原文地址:https://www.cnblogs.com