一个将当前目录下HEX文件的第一行数据删除的程序

简介: 为什么要写这样一个函数在使用SoftConsole开发M3程序时,生成的hex文件,必须要把第一行数据删除,才能在Libero中使用,所以写了这个小工具,这是2.0版本了,第一版是直接删除第一行数据,有可能会导致误操作。

为什么要写这样一个函数

在使用SoftConsole开发M3程序时,生成的hex文件,必须要把第一行数据删除,才能在Libero中使用,所以写了这个小工具,这是2.0版本了,第一版是直接删除第一行数据,有可能会导致误操作。

实现原理

主要使用到了bat批处理命令和文件IO操作。

  1. 创建bat批处理文件,内容为dir *.hex /b>hex_file_name.txt
  2. 运行bat命令,这个命令能将当前目录下的hex文件的名称如filename.hex存入到txt文件中
  3. 打开存有hex文件名的txt文件
  4. 读取hex文件
  5. 读取每一个字符,当读取到换行时,即读取到第一行结束,将以后的字符写入到新的hex文件中,直到文件结束
  6. 删除其他的文件,只保留新的hex文件。

运行环境

Code::Blocks 17.12

代码实现:


#include "stdio.h"

#include "stdlib.h"

#include "unistd.h"

#include "string.h"

#include "conio.h"

#include<windows.h>

int main()
{
    FILE *fin,*fout, *fbat, *fhexname;
    int c, i=0;
    char bat_cmd[] = "dir *.hex /b>hex_file_name.txt";
    char hex_name[50];

    char cmd_in;
    printf("\n\n功能:将当前目录下SoftConsole所生成的hex文件删除第一行数据,文件名不限——v1.3\n\n");
    printf("当前目录下的hex文件是新生成的吗? y/n");

    while(1)
    {
        cmd_in = getch();
        if (cmd_in == 'y')
        {
            system("cls");
            break;
        }
        else
            return 0;
    }


    fbat=fopen("get_hex_filename.bat","w");

    fprintf(fbat, "dir *.hex /b>hex_file_name.txt");    //将bat文件内容写入文件

    fclose(fbat);

    system("get_hex_filename.bat");     //运行bat,得到存储hex文件名称的txt文件

    fhexname = fopen("hex_file_name.txt", "r");     //打开txt文件

    while (1)
    {
        hex_name[i++] = fgetc(fhexname);//读取每一个字符

        if ('\n'==hex_name[i-2])        //读取到第一行换行

            break;
    }

    hex_name[i-2] = '\0';

    fin=fopen(hex_name,"r");              //读取hex文件

    fout=fopen("hex_temp.hex","w");       //打开.tmp准备写

    while (1)
    {
        c=fgetc(fin);       //读取每一个字符

        if (EOF==c)         //如果文件结束
            break;

        if ('\n'==c)        //如果读取到换行,为第一行
            break;
    }
    if (EOF!=c)             //如果不是文件结束
        while (1)
        {
            c=fgetc(fin);
            if (EOF==c)     //将第一行换行后的字符写入到新文件
                break;

            fputc(c,fout);
        }
    fclose(fin);     //必须先关闭,否则占用不能删除

    fclose(fout);

    fclose(fhexname);

    remove(hex_name);       //删除源文件

    remove("get_hex_filename.bat");

    remove("hex_file_name.txt");

    rename("hex_temp.hex",hex_name);      //新文件重命名

    printf("\n\n功能:将当前目录下SoftConsole所生成的hex文件删除第一行数据,文件名不限——v1.3\n\n");

    printf("\n当前目录下的%s文件的第1行数据已经删除!\n",hex_name);

    printf("\n注:每执行一次就会删除第1行数据!\n\n");

    printf("按任意键退出此程序。。。\n");

    getch();
}

测试文件test.hex


Microsemi SoftConsole delete hex file line 24
Microsemi SoftConsole delete hex file line 25
Microsemi SoftConsole delete hex file line 26
Microsemi SoftConsole delete hex file line 27
Microsemi SoftConsole delete hex file line 28
Microsemi SoftConsole delete hex file line 29
Microsemi SoftConsole delete hex file line 30
Microsemi SoftConsole delete hex file line 31
Microsemi SoftConsole delete hex file line 32
Microsemi SoftConsole delete hex file line 33
Microsemi SoftConsole delete hex file line 34
Microsemi SoftConsole delete hex file line 35
Microsemi SoftConsole delete hex file line 36
Microsemi SoftConsole delete hex file line 37
Microsemi SoftConsole delete hex file line 38
Microsemi SoftConsole delete hex file line 39
Microsemi SoftConsole delete hex file line 40
Microsemi SoftConsole delete hex file line 41
Microsemi SoftConsole delete hex file line 42

文件下载

del_hex_line1.rar

运行结果:

img_f66b6198ff0ee7fe6b205a114c444d21.jpe


历史精选文章:


欢迎大家关注我的个人博客

或微信扫码关注我的公众号

img_954cd7422a2def047d3f713ee25a28c1.jpe

目录
相关文章
|
7月前
|
C++
C++学习系列---读取文件名存入txt和从txt读取每行信息
C++学习系列---读取文件名存入txt和从txt读取每行信息
|
2月前
|
Linux 开发工具 Perl
Linux命令替换目录下所有文件里有"\n"的字符为""如何操作?
【10月更文挑战第20天】Linux命令替换目录下所有文件里有"\n"的字符为""如何操作?
48 4
|
7月前
|
Java
怎样查找某个目录下内容含有某个字符串的文件
怎样查找某个目录下内容含有某个字符串的文件
41 2
|
6月前
|
Shell Linux
linux shell 脚本实现:根据文件内容中的每行分隔符放入数组,根据规则打印日志并重新创建目录 备份文件
linux shell 脚本实现:根据文件内容中的每行分隔符放入数组,根据规则打印日志并重新创建目录 备份文件
57 0
|
7月前
|
Java
怎样查找某个目录下内容含有某个字符串的文件或多久之前的文件
怎样查找某个目录下内容含有某个字符串的文件或多久之前的文件
39 0
|
7月前
|
弹性计算 运维 Shell
|
Shell Perl
把当前目录(包含子目录)下所有后缀为 “.sh” 的文件后缀变更为 “.shell”,之后删除每个文件的第二行
把当前目录(包含子目录)下所有后缀为 “.sh” 的文件后缀变更为 “.shell”,之后删除每个文件的第二行。
100 1
编写一个程序,如果名为Exercise12_15.txt的文件不存在,则创建该文件。使用文本I/O将随机产生的100个整数写入文件,文件中的整数由空格分开。从文件中读回数据并以升序显示数据。
编写一个程序,如果名为Exercise12_15.txt的文件不存在,则创建该文件。使用文本I/O将随机产生的100个整数写入文件,文件中的整数由空格分开。从文件中读回数据并以升序显示数据。
295 0
del/xcopy时如何在输出窗口中,不显示文件名
del/xcopy时如何在输出窗口中,不显示文件名
330 0
|
存储 文件存储 C++
C++ 实现输出某个文件夹下所有文件名称,finddata_t、findfirst、findnext函数祥讲细讲解
利用C++实现输出某个文件夹下的文件名,需要用到的函数及其数据类型;