鱼C论坛

 找回密码
 立即注册
查看: 1243|回复: 1

[技术交流] 获取文件信息

[复制链接]
发表于 2020-3-30 19:32:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Cool_Breeze 于 2020-3-30 21:24 编辑
  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <io.h>
  6. int main(int argc,char **argv)
  7. {
  8.         static char path[1024];
  9.         char *pat_h=path;
  10.         register int i=0,j=0,k=0;
  11.         char **pf=argv;
  12.         while (*(*pf+j))
  13.         {
  14.                 if (*(*pf+j) == '\\') i++;
  15.                 j++;
  16.         }
  17.         pf=argv;
  18.         for (j=0;k<i;j++,pat_h++)
  19.         {
  20.                 if (*(*pf+j) == '\\')
  21.                 {
  22.                         k++;
  23.                         *pat_h='\\';
  24.                         pat_h++;
  25.                 }
  26.                 *pat_h = *(*pf+j);
  27.         }
  28.         pat_h=path;
  29.         strcat(pat_h,"*.c");
  30.         printf("%s\n",path);
  31.        
  32.         intptr_t handle;
  33.         struct _finddata_t fileinfo;
  34.         time_t t__a;
  35.         struct tm* time__a;
  36.         handle = _findfirst(pat_h,&fileinfo);
  37.         if (handle == -1) exit(EXIT_FAILURE);
  38.         do
  39.         {
  40.                 t__a=fileinfo.time_access;
  41.                 time__a=localtime(&t__a);
  42.                 printf("%s 文件大小:%0.2lf kb 创建日期:%d/%d/%d %d:%d:%d\n",fileinfo.name,(float)fileinfo.size/1024,\
  43.                 time__a->tm_year+1900,time__a->tm_mon+1,time__a->tm_mday,time__a->tm_hour,time__a->tm_min,time__a->tm_sec);
  44.                 t__a=fileinfo.time_write;
  45.                 time__a=localtime(&t__a);
  46.                 printf("%s 文件大小:%0.2lf kb 修改日期:%d/%d/%d %d:%d:%d\n",fileinfo.name,(float)fileinfo.size/1024,\
  47.                 time__a->tm_year+1900,time__a->tm_mon+1,time__a->tm_mday,time__a->tm_hour,time__a->tm_min,time__a->tm_sec);
  48.                 t__a=fileinfo.time_create;
  49.                 time__a=localtime(&t__a);
  50.                 printf("%s 文件大小:%0.2lf kb 访问日期:%d/%d/%d %d:%d:%d\n",fileinfo.name,(float)fileinfo.size/1024,\
  51.                 time__a->tm_year+1900,time__a->tm_mon+1,time__a->tm_mday,time__a->tm_hour,time__a->tm_min,time__a->tm_sec);
  52.         }while (!_findnext(handle,&fileinfo));
  53.         _findclose(handle);
  54.         return 0;
  55. }
复制代码
  1. D:\\GIN\\c\\test\\*.c
  2. cvs.c 文件大小:8.73 kb 创建日期:2020/2/29 13:11:54
  3. cvs.c 文件大小:8.73 kb 修改日期:2020/3/19 18:39:53
  4. cvs.c 文件大小:8.73 kb 访问日期:2020/2/29 13:11:54
  5. mem.c 文件大小:2.43 kb 创建日期:2020/2/27 8:18:22
  6. mem.c 文件大小:2.43 kb 修改日期:2020/3/18 14:10:36
  7. mem.c 文件大小:2.43 kb 访问日期:2020/2/27 8:18:22
  8. test.c 文件大小:2.96 kb 创建日期:2020/2/27 11:16:29
  9. test.c 文件大小:2.96 kb 修改日期:2020/3/27 21:3:32
  10. test.c 文件大小:2.96 kb 访问日期:2020/2/27 11:16:29
  11. test1.c 文件大小:0.66 kb 创建日期:2020/3/16 11:32:52
  12. test1.c 文件大小:0.66 kb 修改日期:2020/3/29 21:33:23
  13. test1.c 文件大小:0.66 kb 访问日期:2020/2/29 13:11:54
  14. test2.c 文件大小:1.62 kb 创建日期:2020/3/29 16:36:45
  15. test2.c 文件大小:1.62 kb 修改日期:2020/3/30 21:15:55
  16. test2.c 文件大小:1.62 kb 访问日期:2020/3/29 16:36:45
  17. 二分法.c 文件大小:0.82 kb 创建日期:2020/3/6 11:33:6
  18. 二分法.c 文件大小:0.82 kb 修改日期:2020/3/6 11:33:6
  19. 二分法.c 文件大小:0.82 kb 访问日期:2020/3/6 11:33:6

  20. --------------------------------
  21. Process exited after 0.01365 seconds with return value 0
  22. 请按任意键继续. . .
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-4-2 21:11:41 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <stddef.h>
  5. #include <malloc.h>
  6. #include <float.h>
  7. #include <errno.h>
  8. typedef unsigned long long intll;

  9. FILE* fileptr(char* file, char* mode);
  10. void scantext(FILE* fp, intll* inu, intll* isize);
  11. void getname(FILE* fp, char* name, intll si);
  12. void getdata(FILE* fp, double* max, double* min, double* avg, double* sum, double* count, intll ns, intll nl, char* max_n, char* min_n);
  13. #define Lines 1024

  14. static char temp[Lines];
  15. static char const delim[]=",";

  16. int main(void)
  17. {
  18.         //FILE* fpi=fileptr("TWII.csv","rb");
  19.         FILE* fpi=fileptr("tes.csv","rb");
  20.         FILE* fpo=fileptr("result.csv","wb");
  21.         static intll inu,isize;
  22.         scantext(fpi,&inu,&isize);
  23.        
  24.         char* iname=(char*)calloc(inu,sizeof(char)*isize);
  25.         char* max_n=(char*)calloc(inu,sizeof(char)*isize);
  26.         char* min_n=(char*)calloc(inu,sizeof(char)*isize);
  27.         getname(fpi, iname, isize);
  28.        
  29.         double* max=(double*)calloc(inu,sizeof(double));
  30.         double* min=(double*)calloc(inu,sizeof(double));
  31.         double* avg=(double*)calloc(inu,sizeof(double));
  32.         double* sum=(double*)calloc(inu,sizeof(double));
  33.         double* count=(double*)calloc(inu,sizeof(double));
  34.         register intll i=0;
  35.         for (i=0;i<inu;i++) *(min+i)=DBL_MAX, *(max+i)=LDBL_MIN;
  36.        
  37.         getdata(fpi, max, min, avg, sum, count, isize, inu, max_n, min_n);
  38.         fprintf(fpo,"Item,Count,Max,Max_Date,Min,Min_Date,Sum,Avg\r\n");
  39.         for (i=0;i<inu-1;i++) fprintf(fpo,"%s,%.0lf,%.6lf,%s,%.6lf,%s,%.6lf,%.6lf\r\n",\
  40.         iname+(i+1)*isize,*(count+i),*(max+i),max_n+i*isize,*(min+i),min_n+i*isize,*(sum+i),*(avg+i));
  41.        
  42.         free(iname);
  43.         free(max);
  44.         free(min);
  45.         free(avg);
  46.         free(sum);
  47.         free(count);
  48.         free(max_n);
  49.         free(min_n);
  50.         fclose(fpi);
  51.         fclose(fpo);
  52.         return 0;
  53. }
  54. FILE* fileptr(char* file, char* mode)
  55. {
  56.         FILE* fp = fopen(file,mode);
  57.         if (fp == NULL)
  58.         {
  59.                 printf("open file fail!:%s",strerror(errno));
  60.                 exit(EXIT_FAILURE);
  61.         }
  62.         return fp;
  63. }
  64. void scantext(FILE* fp, intll* inu, intll* isize)
  65. {
  66.         //读取两行取最大值
  67.         rewind(fp);
  68.         fgets(temp,Lines,fp);
  69.         register intll i=0;
  70.         char *p;
  71.         p=strtok(temp,delim);
  72.         while(p != NULL)
  73.         {
  74.                 i++;
  75.                 *isize=strlen(p) > *isize ? strlen(p)+1 : *isize;
  76.                 p=strtok(NULL,delim);
  77.         }
  78.         fgets(temp,Lines,fp);
  79.         p=strtok(temp,delim);
  80.         while(p != NULL)
  81.         {
  82.                 *isize=strlen(p) > *isize ? strlen(p)+1 : *isize;
  83.                 p=strtok(NULL,delim);
  84.         }
  85.         *inu=i;
  86. }
  87. void getname(FILE* fp, char* name, intll si)
  88. {
  89.         rewind(fp);
  90.         fgets(temp,Lines,fp);
  91.         char* p=strtok(temp,delim);
  92.         register intll i=0,l;
  93.         while (p != NULL)
  94.         {
  95.                 strcpy(name+i*si,p);
  96.                 p=strtok(NULL,delim);
  97.                 i++;
  98.         }
  99.         //去掉最后一列换行符;
  100.         i--;
  101.         l=strlen(name+i*si);
  102.         while (l--)
  103.                 if (*(name+i*si+l) == 0xA || *(name+i*si+l) == 0xD)
  104.                         *(name+i*si+l) = '\0';
  105.                 else break;
  106. }
  107. void getdata(FILE* fp, double* max, double* min, double* avg, double* sum, double* count, intll ns, intll nl, char* max_n, char* min_n)
  108. {
  109.         rewind(fp);
  110.         fgets(temp,Lines,fp);
  111.        
  112.         register double t=0;
  113.         register intll i=0;
  114.         register intll cou=0;
  115.         char *p=NULL;
  116.         char *pb=NULL;
  117.        
  118.         while (fgets(temp,Lines,fp))
  119.         {
  120.                 cou++;
  121.                 i=0;
  122.                 p=pb=strtok(temp,delim);
  123.                 do
  124.                 {
  125.                         p=strtok(NULL,delim);
  126.                         if (p == NULL) break;
  127.                         t=atof(p);
  128.                         if (t > *(max+i))
  129.                         {
  130.                                 *(max+i) = t;
  131.                                 memmove(max_n+i*ns,pb,strlen(pb));
  132.                                 *(max_n+i*ns+strlen(pb))='\0';
  133.                         }
  134.                         if (t < *(min+i))
  135.                         {
  136.                                 *(min+i) = t;
  137.                                 memmove(min_n+i*ns,pb,strlen(pb));
  138.                                 *(min_n+i*ns+strlen(pb))='\0';
  139.                         }
  140.                         *(sum+i)+=t;
  141.                         i++;
  142.                 }while (1);
  143.         }
  144.         register intll j;
  145.         for (j=0; j<nl-1; j++)
  146.         {
  147.                 if (j < i) *(avg+j)=*(sum+j)/cou,*(count+j)=cou;
  148.                 else *(avg+j)=*(sum+j)/(cou-1),*(count+j)=cou-1;
  149.         }
  150. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-28 20:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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