精华内容
下载资源
问答
  • 我想删除文件中的某一行。 网上介绍的办法大概是再建一个文件,把原文件不需删除的内容拷贝过去。 用fgetsfputs。 但fgets是一个一个字符读的… fscanf可以跳行读,该用什么函数录入呢?fprintf没用。。
  • 前几天因为移植,遇到注释乱码问题,因为...同时为了实用性,可以传入要删除注释的文件名,根据我之前做的那个将快递单号传输到Excel 的方式,给要保存的文件重新命名,与那个不同的是,这个除了可以传入要删除注释的文

    目录

    为什么要写这篇

    可以传入文件名,那文件名如何传递进去呢?

    关于可以不传入要保存的文件名,那是如何实现的呢?

    可以传入文件名的好处是什么?

    这是个实用的可执行文件吗?

    后期可改进的


    为什么要写这篇

    前几天因为移植,遇到注释乱码问题,因为最终确定改不回来了,干脆把乱码注释都删掉,就用C语言实现了。

    我也是参考了网上的一篇文章,但是和他/她的不同点是,我按照自己的思路对程序重新实现了,思路不够清晰的话,即使是很简短的代码看起来也是相当费劲的一件事。同时根据自己的习惯写上了注释,我对写注释这件事还是相当执着的,即使在此花费一定量的时间。

    同时为了实用性,可以传入要删除注释的文件名,根据我之前做的那个将快递单号传输到Excel 的方式,给要保存的文件重新命名,与那个不同的是,这个除了可以传入要删除注释的文件名外,还可以传入要保存的文件名。

    可以传入文件名,那文件名如何传递进去呢?

    熟悉main函数传参数的小伙伴应该知道通过命令行,可执行文件后面写入要传入的参数,然后回车就好了。这应该在嵌入式Linux的程序上比较常见。传入的字符串是文件名的话就可以将 待修改的文件名传进去,同理也可以将要保存的文件名传进去。

    关于可以不传入要保存的文件名,那是如何实现的呢?

    首先要知道要要保存的文件名与要修改的源文件的关系,通过要修改的源文件的文件名确定要保存的文件名。

    可以传入文件名的好处是什么?

    如果文件名是源文件内的一个字符串变量,那么就需要每次都修改然后重新编译,就需要使用者配置相应的编译环境。而如今这种已经生成可执行文件,即使没有配置相应的编译环境,也可以执行,只需要cmd命令窗口进入相应文件目录,然后传入文件名参数就可以了。这一步即使是配置相应编译环境也需要这么执行。

    这是个实用的可执行文件吗?

    通过cmd命令窗口进入相应的目录,然后手动输入,回车。。。那太不友好了,还好我知道这问题如何解决,bat脚本,通过鼠标右键的编辑打开bat脚本文件,输入要修改的文件名,保存后双击就会生成删除注释后的源文件了。至于为什么是main.exe 那就是Makefile决定的了。Makefile的打开方式就不能通过鼠标右键的编辑了。我常用的是VS code 和 Notepad++

    Makefile中内容如下,想了解为什么这么写网上应该有大把的资料吧,比如C语言中文网

    如果报出某种警告的话,把bat脚本文件中make那一行删掉,这是编译生成可执行文件用的,没有配置编译环境这一步是不需要的。

    后期可改进的

    更理想的功能是想要删除注释的源文件放在同一目录下,然后双击运行bat脚本,就生成了删除注释后的源文件。

    或者将DeleteNotes.exe 和 DeleteNotes.bat 放在一个目录下,该目录下的所有源文件都删除注释,新生成一个文件夹,用于存放删除注释后的源文件。

     

    我把实现逻辑写在注释里了,可以结合着代码理解一下。文件我上传到CSDN上了:DeleteNotes.zip,有需要的可以拿来试试。

    /**
     * @file DeleteNotes.c
     * @brief   删除C语言文件中的所有注释
     * 
     * @par 修改日志:
     * <table>
     * <tr><th>Date           <th>Version     <th>Author      <th>Description
     * <tr><td>2021-02-01     <td>1.0.0     <td>Lv_*_Guang     <td>修改内容描述
     * </table>
     */
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <stdint.h>
    #include <stdbool.h>
    
    #define MAX_LENGTH      300
    
    
    /**
     * main
     * @brief   查找// 和 / *  * / , 然后删除注释
     * @param   argc 参数描述: 参数个数,以空格分隔得到,不需要输入
     * @param   argv 参数描述: 字符串数组
     * @retval  int 返回值描述: 无
     * @note    如果参数个数小于2,说明没有没有文件要处理,提示并返回
     * @note    如果参数个数为2,第二个字符串为要操作的文件名
     * @note    如果参数个数大于2,说明第三个字符串为要保存的文件名
     * @note    尝试打开和 写入文件(写入时若文件不存在则自动创建)
     * @note    以MAX_LENGTH 为缓存大小,个人试着一行代码基本不会超过这些字符,超过也无所谓
     * @note    fgets 获取MAX_LENGTH - 1 个字符,最后一个字符要留给'\0' ,如果遇到换行符'\n',即使缓存未满也不再读取,
     * @note    可能是因为'\n' 后面紧接着是'\0',C标准库中字符串操作的函数都将'\0' 作为结束符
     * @note    查询到特定字符后将原本读取的某些字符串判定为注释,然后清0
     * @note    将剩余字符写入到要保存的文件中
     */
    int main(int argc, char* argv[])
    {
        FILE *fp, *fp1;
        char str[MAX_LENGTH] = "";
        bool multi_lines_notes = false;
        char str_open_file[30] = "";
        char str_save_file[30] = "";
    
        if(argc <= 1)
        {
            printf("There are no files to modify! \n");
            exit(0);
        }else if(argc <= 2)
        {
            char str_filename[30] = "";
            char str_fileextension[30] = "";
    
            sprintf(str_open_file, "%s", argv[1]);
            char* suffix = strrchr(str_open_file, '.');
            memcpy(str_filename, str_open_file, strlen(str_open_file) - strlen(suffix));
            memcpy(str_fileextension, suffix, strlen(suffix));
            sprintf(str_save_file, "%s%s%s", str_filename, "_modify", str_fileextension);
    
            printf("str_open_file is : %s \n", str_open_file);
            printf("str_save_file is : %s \n", str_save_file);
        }else
        {
            sprintf(str_open_file, "%s", argv[1]);
            sprintf(str_save_file, "%s", argv[2]);
    
            printf("str_open_file is : %s \n", str_open_file);
            printf("str_save_file is : %s \n", str_save_file);
        }
    
        if ((fp = fopen(str_open_file, "r")) == NULL)
        {
            printf("open file error!\n");
            exit(0);
        }
        if ((fp1 = fopen(str_save_file, "w")) == NULL)
        {
            printf("new_built file error!\n");
            exit(0);
        }
    
        while (fgets(str, MAX_LENGTH - 1, fp) != NULL)  //缓冲区满返回,遇到换行符返回
        {
            for (uint16_t i = 0; i < MAX_LENGTH - 1; i++)
            {
                if (str[i] == '/' && str[i - 1] == '/')     ///< //
                {
                    memset(str + i - 1, '\0', MAX_LENGTH - i);
                    str[i - 1] = '\n';
                    str[i] = '\0';
                }
    
                if (str[i] == '*' && str[i - 1] == '/')     ///< /*
                {
                    memset(str, '\0', i);
                    multi_lines_notes = true;
                    fputs(str, fp1);
                }
    
                if (str[i] == '/' && str[i - 1] == '*')     ///< */
                {
                    memset(str, '\0', i);
    
                    multi_lines_notes = false;
                }
            }
    
            if (! multi_lines_notes)
            {
                fputs(str, fp1);
            }
        }
    
        fclose(fp);
        fclose(fp1);
        return 0;
    }

     

    展开全文
  • 此文档仅供收集于网络如有侵权请联系网站删除 数学与信息技术学院 2016~2017 下学年 计科专业 2015 级数据结构实验报告 2 学号 2015201018 姓名汪继超 实验名称 线性表的链式存储结构 完成时间 1掌握单链表的概念...
  • C语言文件操作有覆盖追加两种模式,但不提供插入模式。所以要在文件中指定行进行删除或者插入,需要按照如下流程操作:1、以只读打开文件;2、将文件逐行读入到内存中;3、关闭文件;4、在内存中对指定行插入或者...

    C语言文件操作有覆盖和追加两种模式,但不提供插入模式。所以要在文件中指定行进行删除或者插入,需要按照如下流程操作:

    1、以只读打开文件;

    2、将文件逐行读入到内存中;

    3、关闭文件;

    4、在内存中对指定行插入或者删除;

    5、以只写打开文件;

    6、将修改后的数据写入文件;

    7、关闭文件。

    参考代码:

    假定文件最多10行,执行删除第2行,并在原第8行中插入一行数据为例,代码如下:

    #include

    #include

    #include

    char buf[10][32];

    int main()

    {

    int i;

    char *str="aabb\n";//要插入的数据

    FILE *fp = fopen("my.txt", "r");//读方式打开文件

    for(i=0;i<10;i++)

    {

    fgets(buf[i], 32, fp);

    }

    fclose(fp);//关闭文件

    for(i = 1; i<7; i ++)//删除第2行

    {

    strcpy(buf[i],buf[i+1]);

    }

    strcpy(buf[7], str);//插入到第8行。

    fp=fopen("my.txt", "w"); //写方式打开文件。

    for(i = 0; i < 10; i ++)//写入所有处理后的数据

    {

    fputs(buf[i],fp);

    }

    fclose(fp);//关闭文件。

    return 0;

    }

    展开全文
  • 一、顺序文件 平时所见的文件,例如 txt、doc、mp4 等,文件内容是按照从头到尾的顺序依次存储在磁盘上的,就像排起一条长长的队伍,称为顺序文件。...因此C语言没有提供插入、删除修改文件内容的函数,要想实现这

    一、顺序文件

    平时所见的文件,例如 txt、doc、mp4 等,文件内容是按照从头到尾的顺序依次存储在磁盘上的,就像排起一条长长的队伍,称为顺序文件。

    除了顺序文件,还有索引文件、散列文件等,一般用于特殊领域,例如数据库、高效文件系统等。

    顺序文件的存储结构决定了它能够高效读取内容,但不能够随意插入、删除和修改内容。例如在文件开头插入100个字节的数据,那么原来文件的所有内容都要向后移动100个字节,这不仅是非常低效的操作,而且还可能覆盖其他文件。因此C语言没有提供插入、删除、修改文件内容的函数,要想实现这些功能,只能自己编写函数。

    以插入数据为例,假设原来文件的大小为 1000 字节,现在要求在500字节处插入用户输入的字符串,那么可以这样来实现:
    (1)创建一个临时文件,将后面500字节的内容复制到临时文件;
    (2)将原来文件的内部指针调整到500字节处,写入字符串;
    (3)再将临时文件中的内容写入到原来的文件(假设字符串的长度为100,那么此时文件内部指针在600字节处)。

    删除数据时,也是类似的思路。假设原来文件大小为1000字节,名称为 demo.mp4,现在要求在500字节处往后删除100字节的数据,那么可以这样来实现:
    (1)创建一个临时文件,先将前500字节的数据复制到临时文件,再将600字节之后的所有内容复制到临时文件;
    (2)删除原来的文件,并创建一个新文件,命名为 demo.mp4;
    (3)将临时文件中的所有数据复制到 demo.mp4。


    修改数据时,如果新数据和旧数据长度相同,那么设置好内部指针,直接写入即可;如果新数据比旧数据长,相当于增加新内容,思路和插入数据类似;如果新数据比旧数据短,相当于减少内容,思路和删除数据类似。实际开发中,我们往往会保持新旧数据长度一致,以减少编程的工作量,所以我们不再讨论新旧数据长度不同的情况。


    二、文件复制函数

    在数据的插入删除过程中,需要多次复制文件内容,我们有必要将该功能实现为一个函数,如下所示:

    /**
    * 文件复制函数
    * @param fSource 要复制的原文件
    * @param offsetSource 原文件的位置偏移(相对文件开头),也就是从哪里开始复制
    * @param len 要复制的内容长度,小于0表示复制offsetSource后边的所有内容
    * @param fTarget 目标文件,也就是将文件复制到哪里
    * @param offsetTarget 目标文件的位置偏移,也就是复制到目标文件的什么位置
    * @return 成功复制的字节数
    **/
    long fcopy(FILE *fSource, long offsetSource, long len, FILE *fTarget, long offsetTarget)
    {
    	int bufferLen = 1024*4; // 缓冲区长度
    	char *buffer = (char*)malloc(bufferLen); // 开辟缓存
    	int readCount; // 每次调用fread()读取的字节数
    	long nBytes = 0; //总共复制了多少个字节
    	int n = 0; //需要调用多少次fread()函数
    	int i; //循环控制变量
    
    	fseek(fSource, offsetSource, SEEK_SET);
    	fseek(fTarget, offsetTarget, SEEK_SET);
    
    	if(len<0){ //复制所有内容
    		while( (readCount=fread(buffer, 1, bufferLen, fSource)) > 0 ){
    			nBytes += readCount;
    			fwrite(buffer, readCount, 1, fTarget);
    		}
    	}else{ //复制len个字节的内容
    		n = (int)ceil((double)((double)len/bufferLen));
    		for(i=1; i<=n; i++){
    			if(len-nBytes < bufferLen){ bufferLen = len-nBytes; }
    			readCount = fread(buffer, 1, bufferLen, fSource);
    			fwrite(buffer, readCount, 1, fTarget);
    			nBytes += readCount;
    		}
    	}
    	fflush(fTarget);
    	free(buffer);
    	return nBytes;
    }

    该函数可以将原文件任意位置的任意长度的内容复制到目标文件的任意位置,非常灵活。如果希望实现《 81-C语言实现文件复制功能(包括文本文件和二进制文件) 》一节中的功能,那么可以像这样调用:

    fcopy(fSource, 0, -1, fTarget, 0);

    三、文件内容插入函数

    请先看代码:

    /**
    * 向文件中插入内容
    * @param fp 要插入内容的文件
    * @param buffer 缓冲区,也就是要插入的内容
    * @param offset 偏移量(相对文件开头),也就是从哪里开始插入
    * @param len 要插入的内容长度
    * @return 成功插入的字节数
    **/
    int finsert(FILE *fp, long offset, void *buffer, int len)
    {
    	long fileSize = fsize(fp);
    	FILE *fpTemp; //临时文件
    
    	if(offset>fileSize || offset<0 || len<0){ //插入错误
    		return -1;
    	}
    
    	if(offset == fileSize){ //在文件末尾插入
    		fseek(fp, offset, SEEK_SET);
    		if(!fwrite(buffer, len, 1, fp)){
    			return -1;
    		}
    	}
    
    	if(offset < fileSize){ //从开头或者中间位置插入
    		fpTemp = tmpfile();
    		fcopy(fp, 0, offset, fpTemp, 0);
    		fwrite(buffer, len, 1, fpTemp);
    		fcopy(fp, offset, -1, fpTemp, offset+len);
    		freopen(FILENAME, "wb+", fp );
    		fcopy(fpTemp, 0, -1, fp, 0);
    		fclose(fpTemp);
    	}
    
    	return 0;
    }

    代码说明:
    (1)fsize() 是在《 83-C语言获取文件大小(长度)》自定义的函数,用来获取文件大小(以字节计)。

    (2)判断数据的插入位置,如果是在文件末尾,就非常简单,直接用 fwrite() 写入即可。

    (3)如果从文件开头或中间插入,就得创建临时文件。


    tmpfile() 函数用来创建一个临时的二进制文件,可以读取和写入数据,相当于 fopen() 函数以"wb+"方式打开文件。该临时文件不会和当前已存在的任何文件重名,并且会在调用 fclose() 后或程序结束后自动删除。


    四、文件内容删除函数

    请看下面的代码:

    int fdelete(FILE *fp, long offset, int len)
    {
    	long fileSize = getFileSize(fp);
    	FILE *fpTemp;
    
    	if(offset>fileSize || offset<0 || len<0){ //错误
    		return -1;
    	}
    
    	fpTemp = tmpfile();
    	fcopy(fp, 0, offset, fpTemp, 0); //将前offset字节的数据复制到临时文件
    	fcopy(fp, offset+len, -1, fpTemp, offset); //将offset+len之后的所有内容都复制到临时文件
    	freopen(FILENAME, "wb+", fp ); //重新打开文件
    	fcopy(fpTemp, 0, -1, fp, 0);
    
    	fclose(fpTemp);
    	return 0;
    }

    文件第6~8行用来判断传入的参数是否合法。freopen() 以"w+"方式打开文件时,如果有同名的文件存在,那么先将文件内容删除,作为一个新文件对待。 

    展开全文
  • 通讯录 C语言 文件

    2009-11-30 17:48:44
    本系统要求以常用的通讯录功能为蓝本,开发一个简单的系统,能储存联系人的信息,能添加记录,显示记录,删除记录,修改记录按姓名查询
  • 1.关与remove remove用法:remove(“文件名”); 作用:删除文件 ...注意:这个remove类似,都要先关闭文件,再删除。 在调用函数时,如果被调用函数里面用到了removerename,一定要在调用函数...

    1.关与remove
    remove用法:remove(“文件名”);
    作用:删除某文件
    注意:用这个函数时一定要先关闭文件,再删除,否则就会删除失败。

    例如:先删除文件再关闭文件就会删除失败

    FILE *fp;
        if((fp=fopen("文件5","ab"))==NULL)
        {
            exit(0);
        }
        remove("文件5");  //先删除
        fclose(fp);  //后关闭
    

    运行后:文件仍然存在,删除失败
    在这里插入图片描述

    先关闭文件再删除才能删除成功

    FILE *fp;
        if((fp=fopen("文件5","ab"))==NULL)
        {
            exit(0);
        }
        fclose(fp);  //先关闭
        remove("文件5");  //后删除
    

    运行后:删除成功
    在这里插入图片描述

    2:关于rename
    rename用法:rename(“原文件名”,“新文件名”);
    作用:修改某文件的名称
    注意:这个和remove类似,都要先关闭文件,再删除。

    例如:先改名后关闭文件

    FILE *fp;
        if((fp=fopen("文件5","ab"))==NULL)
        {
            exit(0);
        }
        rename("文件5","文件567");//先改名
        fclose(fp);   //后关闭文件
    

    运行后:文件改名失败
    在这里插入图片描述

    如果先关闭文件再改名

    FILE *fp;
        if((fp=fopen("文件5","ab"))==NULL)
        {
            exit(0);
        }
        fclose(fp);   //先关闭文件
        rename("文件5","文件567");//后改名
    

    运行后:改名成功
    在这里插入图片描述

    在调用函数时,如果被调用函数里面用到了remove和rename,一定要在调用函数前关闭文件,否则操作就会失败,因为这个错误不明显,不是很好找,之前有一次我找了半天才知道是这个问题,在这提醒大家一下。
    例如:

    void handle()
    {
        FILE *fq;
        if((fq=fopen("文件5","ab"))==NULL)
        {
            exit(0);
        }
        fclose(fq);//先关闭文件
        remove("文件5");//再删除文件
    }
    int main()
    {
        FILE *fp;
        if((fp=fopen("文件5","ab"))==NULL)
        {
            exit(0);
        }
        handle();//先调用函数,在调用函数前没有关闭文件
        fclose(fp);
        return 0;
    }
    

    大家注意:handle函数这段代码看似正确,但因为我们在main函数中并没有在调用handle函数前关闭文件,所以最中会导致删除失败。结果如下:
    在这里插入图片描述
    文件仍然存在,删除失败。

    也就是说,指向同一个文件的指针可以有多个,但只要有一个指针还指向这个文件,那么该文件用remove函数删除就会删除失败。上面这个例子就是因为在调用handle函数前没有关闭文件,所以在handle函数里面即使执行了fclose(fq)这一语句,但在main函数中的fp还是指向该文件。也就是说还有指针指向待删除的文件。最终导致删除失败。

    我们只要将main函数中的handle()和fclose(fp)交换下位置就可以了。我们看代码:

    void handle()
    {
        FILE *fq;
        if((fq=fopen("文件5","ab"))==NULL)
        {
            exit(0);
        }
        fclose(fq);//先关闭文件
        remove("文件5");//再删除文件
    }
    int main()
    {
        FILE *fp;
        if((fp=fopen("文件5","ab"))==NULL)
        {
            exit(0);
        }
        fclose(fp);//先关闭文件
        handle();//后调用函数
        return 0;
    }
    

    运行后:
    在这里插入图片描述
    文件删除成功。
    *

    3.还是在调用函数前不关闭文件的一些问题
    我们看下面这段代码:

    void handle()
    {
        FILE *fq;
        char b[5];
        if((fq=fopen("文件5","rb"))==NULL)
        {
            exit(0);
        }
        fread(b,sizeof(b),1,fq);
        puts(b);
        fclose(fq);
    }
    int main()
    {
        FILE *fp;
        char a[5]="1234";
        if((fp=fopen("文件5","wb+"))==NULL)
        {
            exit(0);
        }
        fwrite(a,sizeof(a),1,fp);
        handle();
        fclose(fp);
        return 0;
    }
    

    运行结果如下
    在这里插入图片描述
    我们期待的结果应该是数组a的内容"1234",但最终显示的却是乱码。
    这是因为虽然我们在main函数中将数组a的内容存到文件中,但此时我们没有关闭文件,数组a的内容并没有正真传到文件中,它还在缓冲区内。所有我们在执行handle函数时数组b获取的并不是数组a的内容(文件之前没有任何内容)

    所以我们还是得在执行handle前关闭文件,让在缓冲区中的内容到文件中去,也就是交换下面这两行代码的顺序。

    handle();
    fclose(fp);
    

    交换后的结果如下:
    在这里插入图片描述
    现在就正确了。
    *

    4.在用wb+,wa+,wr+这类既能读也能写的打开方式时,尽量不要同时用fread和fwrite。如下:

    FILE *fp;
    char a[5]="1234",b[5];
    if((fp=fopen("文件5","ab+"))==NULL)
    {
        exit(0);
    }
    fread(b,sizeof(b),,fp);
    fwrite(a,sizeof(a),1,fp);
    flcose(fp);
    

    我们想先从文件读取数据到数组b中,然后再将a中的内容写入文件。但这样我们并不能达到我们的目的,不信你可是试试。
    但在fread和fwrite增加一些清空缓存区函数或者文件定位函数,就能同时读之后接着写。例如fseek,rewind。

    fread(b,sizeof(b),,fp);
    fseek(fp,0,1);
    fwrite(a,sizeof(a),1,fp);
    

    这样就可以了。
    这其中原因我也不清楚,只是在这里提醒大家一下。

    ·
    ·
    希望能帮到大家!

    展开全文
  • C语言文件操作在指定行插入数据

    千次阅读 2018-03-16 15:05:00
    C语言文件操作有覆盖追加两种模式,但不提供插入模式。所以要在文件中指定行进行删除或者插入,需要按照如下流程操作: 1、以只读打开文件; 2、将文件逐行读入到内存中; 3、关闭文件; 4、在内存中对指定行...
  • 在大一下,我们的C语言课程布置了一次大作业,要求做出一个管理系统,整个系统可以设计为数据插入模块、数据修改模块、数据删除模块、数据显示模块数据查询模块。各种信息管理系统本质上是没有太大区别的,对于...
  • //需要创建三个文本,分别储存配置项,日志密码 #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include&lt;malloc.h&gt; #include&lt;string.h&gt; #include&lt;...
  • C语言权限的修改

    2021-01-06 20:00:42
    在这题中,我们会得到文件当前的权限希望添加或删除的权限(如果已经对存在/不存在的权限添加/删除则不做改变)。你需要输出最终改变后的权限的十进制描述。 输入格式 输入第一行是当前的文件权限,用 r、w、x 的...
  • 项目要求:1、通讯录采用动态分配空间,并且以文件方式读取存储个人的信息,每个人的信息包括:`姓名、性别、年龄、电话、住址`。 2、通讯录基本要求如下: a、从文件中读入信息 b、添加联系人信息 c、删除指定...
  • 查询、修改、增加、删除。 刚进入系统有两个选择 管理者(身份码为1) 普通学生(身份码为2) 初始化了两个登录身份 管理者使用姓名密码登录:admin 123 学生使用姓名学号登录:zhangsan 111 学生的功能只有一种...
  • C语言实现的一个使用单链表的学生管理系统,使用文件存储学生信息,结构体中包括学号、姓名成绩,实现的功能有系统初始化(创建链表,读取文件中的信息到链表),添加学生记录,根据学号删除学生记录,根据学号...
  • 在这题中,我们会得到文件当前的权限希望添加或删除的权限(如果已经对存在/不存在的权限添加/删除则不做改变)。你需要输出最终改变后的权限的十进制描述。 输入格式 输入第一行是当前的文件
  • C语言配置文件解析库 — iniparser可以方便的对配置文件进行解析、添加、修改删除等操作。 github地址 iniparser官网 我的CSDN下载 配置文件格式: - 注释:iniparser会无视注释,注释以英文分号开头(;...
  • 本次课程设计使用C语言制作程序来实现图书的登记,删除,查询,浏览以及读者的借阅,还书,会员登录,修改密码等功能。程序中涉及到数据链表和文件指针的操作,包括结构体数据定义,使用及文件的读写,定位,修改等...
  • /*删除图书信息*/ void deletel(STUDENTS book[]) { system("cls"); char Bookname2[20]; int i,j; printf("请输入图书书名:"); scanf("%s",Bookname2); printf("\n"); for(i=0;i;i++) if(strcmp...
  • 文件的读写需要用到c语言文件操作函数。 显示学生成绩信息功能分为三个小功能:根据目生成绩信息数量遍历学生成绩信息数组,显示全部学生成绩信息;根据输入学号显示学生成绩信息;根据输入姓名显示学生成绩信息...
  • 修改已知学号的学生信息 删除已知学号的学生信息 查找已知学号的学生信息 按学号,专业输出学生籍贯表 查询学生学籍变化,比如入学,转专业,退学,降级,休学,毕业 源码如下: #include<stdio.h> #include...
  • 2、保证临时文件中内容不被其他用户或者黑客偷看、删除和修改。 所以在linux下有专门处理临时文件的函数 mkstemp函数 mkstemp函数将在系统中以独一无二的文件名创建一个文件并打开,而且只有当前用户才有访问这个...
  • 用户功能权限设置 <p>(4)其他 目前已经有的代码是:  #include <stdio.h>typedef struct _Student{ int nStuNum; char szName[20]; char szSex[4]; char szClass[20]; float fScore; }...
  • 通过使用“学生管理系统”,可以更加有效地对学生实现管理,完成对学生基本信息以及成绩信息的文件保存,具有信息的增加,删除、查询以及修改等功能,能提供简单的数据统计、分析信息。 二、整体设计 学生管理系统 ...
  • 实现C语言对数据增删查改功能 用到如下函数 数据删除 :delete_data() 数据查找:search_data() 数据添加:add_data() 数据修改:update_data() 用到光标操作函数:fseek()函数 光标offset的值由 offset=sizeof(&struct...
  • (1)多用户 :usr1,usr2 (2个用户) (2)多级目录:具有树形目录结构; (3)具有login (用户登录)用户身份认证...(14)有文件保护机制,如对文件设置访问权限等(如用户usr1不能对usr2创建的文件进行修改等)。
  • C语言通讯录

    2013-05-17 18:51:36
    3. 记录的添加和删除。 4. 对同一类型记录的查找:如查找同一城市的记录或同一省份的记录。 五、解决方案 1. 分析程序的功能要求,划分程序功能模块。 2. 画出系统流程图。 3. 代码的编写。定义数据结构和各个...
  • C语言员工管理系统

    2018-11-13 19:44:02
    使用C语言文件进行操作,实现管理员员工的登录、员工添加、删除修改、查询,以及员工签到的功能。
  • 主要是文件的打开读写方式,较为简单。 基于文件的学生管理系统 •要求: 1)、定义学生结构体,包含学号、姓名、成绩三个属性。 2)、实现功能如下: 添加学生 根据学号删除学生 根据学号...
  • 其他人出现的乱码问题不同。困扰了好几天了,还是没找到代码的问题之处,希望各位能帮忙看看,非常感谢!!! 代码不长,而且有的功能还没有做出来,但是文件...
  • 此篇文章在(一)的基础上,进一步扩大了人员文件管理系统的两个功能,修改人员信息和删除人员。 至此,简单的增删查改功能全部实现。 代码没有用到链表(主要是刚学,还不熟QAQ),用的是结构体数组,下面直接给出...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 503
精华内容 201
关键字:

c语言文件修改和删除

c语言 订阅