鱼C论坛

 找回密码
 立即注册
查看: 5237|回复: 15

[已解决]C语言文件比对后创新文件

[复制链接]
发表于 2021-6-29 09:56:25 | 显示全部楼层 |阅读模式
50鱼币
希望大神们指导

档案建立后 无法新增档案
会以同一个文件持续下去 且覆盖原文件内容

我想要做到文件比对
若文件存在
则创新文件
若不存在
也创新文件
但每次只创建一个新文件

内部内容可以直接写入任意值

档名以流水号形式增加

example :

file_001
file_002
file_003.
.
.
.
file_020
最佳答案
2021-6-29 09:56:26
a87949 发表于 2021-6-30 09:44
谢谢,我知道C在操作上比较不容易,但我只能使用C语言
主要是因为 在下使用的单片机没有支援 python

你看看这个呢??
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <io.h>
  4. #include <string.h>

  5. char *substring(char *dst,char *src,int start)
  6. {  
  7.         char *p=dst;  
  8.         char *q=src;  
  9.         int length=strlen(src);
  10.     int dstlen=length-4-4;
  11.         if(start>=length||start<0 || dstlen<1)
  12.                 return NULL;  
  13.         q+=start;
  14.         while(dstlen--)  
  15.         {   
  16.                 *(p++)=*(q++);
  17.         }  
  18.         *(p++)='\0';  
  19.         return dst;
  20. }

  21. char*  getfilename(  const  char * path,char* dst )
  22. {
  23.      struct  _finddata_t  data;
  24.      char  tmp[256]={"\0"};
  25.      long  hnd = _findfirst( path, &data );     
  26.      if  ( hnd < 0 )
  27.      {
  28.          return NULL;
  29.      }
  30.      int   nRet = (hnd <0 ) ? -1 : 1;
  31.      int max=0;
  32.      while  ( nRet >= 0 )
  33.      {
  34.          if  ( data.attrib!= _A_SUBDIR ){

  35.               int t= atoi(substring(tmp,data.name,4));
  36.               if (t>max) max=t;
  37.          }
  38.          nRet = _findnext( hnd, &data );
  39.      }
  40.      _findclose( hnd );     
  41.      sprintf(dst,"file%04d.txt",max+1);
  42.      return dst;
  43. }

  44. int main()
  45. {
  46.         char filename[256]={"\0"};      
  47.         char *file=getfilename(".\\file*.txt",filename);
  48.         FILE *fp;
  49.         if (file){
  50.             fp = fopen(file, "w");
  51.             printf("%s文件创建成功\n",file);
  52.         }else
  53.         {
  54.             fp=fopen("file0001.txt","w");
  55.             printf("初始文件创建成功\n");
  56.         }
  57.         fclose(fp);
  58.         return 0;
  59.       
  60. }

  61. /*
  62.     PS D:\我> ./wp1
  63.     初始文件创建成功
  64.     PS D:\我> ./wp1
  65.     file0002.txt文件创建成功
  66.     PS D:\我> ./wp1
  67.     file0003.txt文件创建成功
  68.     PS D:\我> ./wp1
  69.     file0004.txt文件创建成功
  70.     PS D:\我> ./wp1
  71.     file0005.txt文件创建成功
  72.     PS D:\我> ./wp1
  73.     file0006.txt文件创建成功
  74.     PS D:\我>
  75. */
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-6-29 11:17:51 | 显示全部楼层
在不确定的情况下是否能能够确定文件是否存在
采用连续新增的做法
为了避免 覆盖掉之前的文件 所以要先确认是否有已存在之文件

要的
因为创新文件
并不会持续创新
而是会覆盖掉原本的文件

这个作法是要保留原文件
并持续新增文件
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-6-29 11:44:49 | 显示全部楼层
wp231957 发表于 2021-6-29 11:42
你这样说  别人也没办法帮你
说明白一些   要是说不明白  举例
你这啥意思啊

对!
就试这个

抱歉  个人表达能力不好
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-6-29 13:05:59 | 显示全部楼层
wp231957 发表于 2021-6-29 11:47
那是不是01在就02,此时02在就03假设3也在就04  一直下去???

是的  就是这样
因为困扰小弟很久了.....所以才向大神们提出讨论
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-6-30 09:44:23 | 显示全部楼层
wp231957 发表于 2021-6-29 13:42
我好久都不写c代码了,估计都忘了,而且c操作字符串也不如其他语言方便
我用python写了一段   你看看 是 ...

谢谢,我知道C在操作上比较不容易,但我只能使用C语言
主要是因为 在下使用的单片机没有支援 python
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-7-1 10:22:58 | 显示全部楼层
感谢大神的指导
本次最佳答案 经由实验来说明
人大大: 在使用上,会造成系统增加大量的DLL档案,在移植后一样也会在新系统增加档案 若删除 前次的档案 顺序不会 reset
w大大 : 会先确定是文件是否存在然后才会新增档案 ,若旧有文件移除后,会从头开始新增
所以选择W大大为最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-4-2 02:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表