a87949 发表于 2021-6-29 09:56:25

C语言文件比对后创新文件

希望大神们指导

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

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

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

档名以流水号形式增加

example :

file_001
file_002
file_003.
.
.
.
file_020

wp231957 发表于 2021-6-29 09:56:26

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

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

char *substring(char *dst,char *src,int start)
{
        char *p=dst;
        char *q=src;
        int length=strlen(src);
    int dstlen=length-4-4;
        if(start>=length||start<0 || dstlen<1)
                return NULL;
        q+=start;
        while(dstlen--)
        {   
                *(p++)=*(q++);
        }
        *(p++)='\0';
        return dst;
}

char*getfilename(constchar * path,char* dst )
{
   struct_finddata_tdata;
   chartmp={"\0"};
   longhnd = _findfirst( path, &data );   
   if( hnd < 0 )
   {
         return NULL;
   }
   int   nRet = (hnd <0 ) ? -1 : 1;
   int max=0;
   while( nRet >= 0 )
   {
         if( data.attrib!= _A_SUBDIR ){

            int t= atoi(substring(tmp,data.name,4));
            if (t>max) max=t;
         }
         nRet = _findnext( hnd, &data );
   }
   _findclose( hnd );   
   sprintf(dst,"file%04d.txt",max+1);
   return dst;
}

int main()
{
      char filename={"\0"};      
      char *file=getfilename(".\\file*.txt",filename);
      FILE *fp;
      if (file){
            fp = fopen(file, "w");
            printf("%s文件创建成功\n",file);
      }else
      {
            fp=fopen("file0001.txt","w");
            printf("初始文件创建成功\n");
      }
      fclose(fp);
      return 0;
      
}

/*
    PS D:\我> ./wp1
    初始文件创建成功
    PS D:\我> ./wp1
    file0002.txt文件创建成功
    PS D:\我> ./wp1
    file0003.txt文件创建成功
    PS D:\我> ./wp1
    file0004.txt文件创建成功
    PS D:\我> ./wp1
    file0005.txt文件创建成功
    PS D:\我> ./wp1
    file0006.txt文件创建成功
    PS D:\我>
*/

wp231957 发表于 2021-6-29 10:14:31

若文件存在
则创新文件
若不存在
也创新文件
这不就是直接创建新文件,还要判断文件是否存在???

a87949 发表于 2021-6-29 11:17:51

在不确定的情况下是否能能够确定文件是否存在
采用连续新增的做法
为了避免 覆盖掉之前的文件 所以要先确认是否有已存在之文件

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

这个作法是要保留原文件
并持续新增文件

wp231957 发表于 2021-6-29 11:42:19

a87949 发表于 2021-6-29 11:17
在不确定的情况下是否能能够确定文件是否存在
采用连续新增的做法
为了避免 覆盖掉之前的文件 所以要先确 ...

你这样说别人也没办法帮你
说明白一些   要是说不明白举例
你这啥意思啊
file01 存在则创建file02file01 不存在则 创建file01????

a87949 发表于 2021-6-29 11:44:49

wp231957 发表于 2021-6-29 11:42
你这样说别人也没办法帮你
说明白一些   要是说不明白举例
你这啥意思啊


对!
就试这个

抱歉个人表达能力不好

wp231957 发表于 2021-6-29 11:47:18

a87949 发表于 2021-6-29 11:44
对!
就试这个



那是不是01在就02,此时02在就03假设3也在就04一直下去???

人造人 发表于 2021-6-29 11:50:47

看不懂你的问题

永恒的蓝色梦想 发表于 2021-6-29 12:05:25

什么叫创新文件?生活中处处有创新?

a87949 发表于 2021-6-29 13:05:59

wp231957 发表于 2021-6-29 11:47
那是不是01在就02,此时02在就03假设3也在就04一直下去???

是的就是这样
因为困扰小弟很久了.....所以才向大神们提出讨论

wp231957 发表于 2021-6-29 13:42:14

a87949 发表于 2021-6-29 13:05
是的就是这样
因为困扰小弟很久了.....所以才向大神们提出讨论

我好久都不写c代码了,估计都忘了,而且c操作字符串也不如其他语言方便
我用python写了一段   你看看 是不是你要的意思

import glob

filelist=glob.glob("file*.txt")
if "file001.txt" not in filelist:
    f=open("file001.txt","w")
    f.close()
else:
    lst=) for x in filelist]
    s="file"+"0"*(len(filelist)-len(str((max(lst)))))+str(max(lst)+1)+".txt"
    f=open(s,"w")
    f.close()
filelist=glob.glob("file*.txt")
print(filelist)

'''
    PS D:\我> py file.py
    ['file001.txt', 'file002.txt']
    PS D:\我> py file.py
    ['file001.txt', 'file002.txt', 'file003.txt']
    PS D:\我> py file.py
    ['file001.txt', 'file002.txt', 'file003.txt', 'file004.txt']
    PS D:\我> py file.py
    ['file001.txt', 'file002.txt', 'file003.txt', 'file004.txt', 'file005.txt']
    PS D:\我> py file.py
    ['file001.txt', 'file002.txt', 'file003.txt', 'file004.txt', 'file005.txt', 'file006.txt']
    PS D:\我> py file.py
    ['file001.txt', 'file002.txt', 'file003.txt', 'file004.txt', 'file005.txt', 'file006.txt', 'file007.txt']
    PS D:\我> py file.py
    ['file001.txt', 'file002.txt', 'file003.txt', 'file004.txt', 'file005.txt', 'file006.txt', 'file007.txt', 'file008.txt']
    PS D:\我> py file.py
    ['file001.txt', 'file002.txt', 'file003.txt', 'file004.txt', 'file005.txt', 'file006.txt', 'file007.txt', 'file008.txt', 'file009.txt']
    PS D:\我> py file.py
'''

qiuyouzhi 发表于 2021-6-29 19:04:11

a87949 发表于 2021-6-29 13:05
是的就是这样
因为困扰小弟很久了.....所以才向大神们提出讨论

建个 i 变量,值就为 1
然后判断,如果 00{i} 存在,i 就++,变成2
然后再判断 00{i},一直循环下去
直到没有 00{i}, 退出循环,新建文件

a87949 发表于 2021-6-30 09:44:23

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

谢谢,我知道C在操作上比较不容易,但我只能使用C语言
主要是因为 在下使用的单片机没有支援 python

人造人 发表于 2021-6-30 11:02:53

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

#include <stdio.h>

int main(void) {
    FILE *fp;
    fp = fopen("count", "r+");
    if(!fp) {
      fp = fopen("count", "w+");
      fprintf(fp, "1");
      fseek(fp, 0, SEEK_SET);
    }
    size_t count;
    fscanf(fp, "%lu", &count);
    fseek(fp, 0, SEEK_SET);
    fprintf(fp, "%lu", count + 1);
    fclose(fp);
    char buff;
    snprintf(buff, 128, "file_%.4lu.txt", count);
    printf("count: %s\n", buff);
    fp = fopen(buff, "w+");
    fprintf(fp, "%s", buff);
    fclose(fp);
    return 0;
}

我是小白别骗我 发表于 2021-6-30 16:17:16

抱歉,文件这方面不太熟悉

a87949 发表于 2021-7-1 10:22:58

感谢大神的指导
本次最佳答案 经由实验来说明
人大大: 在使用上,会造成系统增加大量的DLL档案,在移植后一样也会在新系统增加档案 若删除 前次的档案 顺序不会 reset
w大大 : 会先确定是文件是否存在然后才会新增档案 ,若旧有文件移除后,会从头开始新增
所以选择W大大为最佳答案
页: [1]
查看完整版本: C语言文件比对后创新文件