Cool_Breeze 发表于 2020-3-30 19:32:53

获取文件信息

本帖最后由 Cool_Breeze 于 2020-3-30 21:24 编辑

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
#include <io.h>
int main(int argc,char **argv)
{
        static char path;
        char *pat_h=path;
        register int i=0,j=0,k=0;
        char **pf=argv;
        while (*(*pf+j))
        {
                if (*(*pf+j) == '\\') i++;
                j++;
        }
        pf=argv;
        for (j=0;k<i;j++,pat_h++)
        {
                if (*(*pf+j) == '\\')
                {
                        k++;
                        *pat_h='\\';
                        pat_h++;
                }
                *pat_h = *(*pf+j);
        }
        pat_h=path;
        strcat(pat_h,"*.c");
        printf("%s\n",path);
       
        intptr_t handle;
        struct _finddata_t fileinfo;
        time_t t__a;
        struct tm* time__a;
        handle = _findfirst(pat_h,&fileinfo);
        if (handle == -1) exit(EXIT_FAILURE);
        do
        {
                t__a=fileinfo.time_access;
                time__a=localtime(&t__a);
                printf("%s 文件大小:%0.2lf kb 创建日期:%d/%d/%d %d:%d:%d\n",fileinfo.name,(float)fileinfo.size/1024,\
                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);
                t__a=fileinfo.time_write;
                time__a=localtime(&t__a);
                printf("%s 文件大小:%0.2lf kb 修改日期:%d/%d/%d %d:%d:%d\n",fileinfo.name,(float)fileinfo.size/1024,\
                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);
                t__a=fileinfo.time_create;
                time__a=localtime(&t__a);
                printf("%s 文件大小:%0.2lf kb 访问日期:%d/%d/%d %d:%d:%d\n",fileinfo.name,(float)fileinfo.size/1024,\
                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);
        }while (!_findnext(handle,&fileinfo));
        _findclose(handle);
        return 0;
}

D:\\GIN\\c\\test\\*.c
cvs.c 文件大小:8.73 kb 创建日期:2020/2/29 13:11:54
cvs.c 文件大小:8.73 kb 修改日期:2020/3/19 18:39:53
cvs.c 文件大小:8.73 kb 访问日期:2020/2/29 13:11:54
mem.c 文件大小:2.43 kb 创建日期:2020/2/27 8:18:22
mem.c 文件大小:2.43 kb 修改日期:2020/3/18 14:10:36
mem.c 文件大小:2.43 kb 访问日期:2020/2/27 8:18:22
test.c 文件大小:2.96 kb 创建日期:2020/2/27 11:16:29
test.c 文件大小:2.96 kb 修改日期:2020/3/27 21:3:32
test.c 文件大小:2.96 kb 访问日期:2020/2/27 11:16:29
test1.c 文件大小:0.66 kb 创建日期:2020/3/16 11:32:52
test1.c 文件大小:0.66 kb 修改日期:2020/3/29 21:33:23
test1.c 文件大小:0.66 kb 访问日期:2020/2/29 13:11:54
test2.c 文件大小:1.62 kb 创建日期:2020/3/29 16:36:45
test2.c 文件大小:1.62 kb 修改日期:2020/3/30 21:15:55
test2.c 文件大小:1.62 kb 访问日期:2020/3/29 16:36:45
二分法.c 文件大小:0.82 kb 创建日期:2020/3/6 11:33:6
二分法.c 文件大小:0.82 kb 修改日期:2020/3/6 11:33:6
二分法.c 文件大小:0.82 kb 访问日期:2020/3/6 11:33:6

--------------------------------
Process exited after 0.01365 seconds with return value 0
请按任意键继续. . .

Cool_Breeze 发表于 2020-4-2 21:11:41

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stddef.h>
#include <malloc.h>
#include <float.h>
#include <errno.h>
typedef unsigned long long intll;

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

static char temp;
static char const delim[]=",";

int main(void)
{
        //FILE* fpi=fileptr("TWII.csv","rb");
        FILE* fpi=fileptr("tes.csv","rb");
        FILE* fpo=fileptr("result.csv","wb");
        static intll inu,isize;
        scantext(fpi,&inu,&isize);
       
        char* iname=(char*)calloc(inu,sizeof(char)*isize);
        char* max_n=(char*)calloc(inu,sizeof(char)*isize);
        char* min_n=(char*)calloc(inu,sizeof(char)*isize);
        getname(fpi, iname, isize);
       
        double* max=(double*)calloc(inu,sizeof(double));
        double* min=(double*)calloc(inu,sizeof(double));
        double* avg=(double*)calloc(inu,sizeof(double));
        double* sum=(double*)calloc(inu,sizeof(double));
        double* count=(double*)calloc(inu,sizeof(double));
        register intll i=0;
        for (i=0;i<inu;i++) *(min+i)=DBL_MAX, *(max+i)=LDBL_MIN;
       
        getdata(fpi, max, min, avg, sum, count, isize, inu, max_n, min_n);
        fprintf(fpo,"Item,Count,Max,Max_Date,Min,Min_Date,Sum,Avg\r\n");
        for (i=0;i<inu-1;i++) fprintf(fpo,"%s,%.0lf,%.6lf,%s,%.6lf,%s,%.6lf,%.6lf\r\n",\
        iname+(i+1)*isize,*(count+i),*(max+i),max_n+i*isize,*(min+i),min_n+i*isize,*(sum+i),*(avg+i));
       
        free(iname);
        free(max);
        free(min);
        free(avg);
        free(sum);
        free(count);
        free(max_n);
        free(min_n);
        fclose(fpi);
        fclose(fpo);
        return 0;
}
FILE* fileptr(char* file, char* mode)
{
        FILE* fp = fopen(file,mode);
        if (fp == NULL)
        {
                printf("open file fail!:%s",strerror(errno));
                exit(EXIT_FAILURE);
        }
        return fp;
}
void scantext(FILE* fp, intll* inu, intll* isize)
{
        //读取两行取最大值
        rewind(fp);
        fgets(temp,Lines,fp);
        register intll i=0;
        char *p;
        p=strtok(temp,delim);
        while(p != NULL)
        {
                i++;
                *isize=strlen(p) > *isize ? strlen(p)+1 : *isize;
                p=strtok(NULL,delim);
        }
        fgets(temp,Lines,fp);
        p=strtok(temp,delim);
        while(p != NULL)
        {
                *isize=strlen(p) > *isize ? strlen(p)+1 : *isize;
                p=strtok(NULL,delim);
        }
        *inu=i;
}
void getname(FILE* fp, char* name, intll si)
{
        rewind(fp);
        fgets(temp,Lines,fp);
        char* p=strtok(temp,delim);
        register intll i=0,l;
        while (p != NULL)
        {
                strcpy(name+i*si,p);
                p=strtok(NULL,delim);
                i++;
        }
        //去掉最后一列换行符;
        i--;
        l=strlen(name+i*si);
        while (l--)
                if (*(name+i*si+l) == 0xA || *(name+i*si+l) == 0xD)
                        *(name+i*si+l) = '\0';
                else break;
}
void getdata(FILE* fp, double* max, double* min, double* avg, double* sum, double* count, intll ns, intll nl, char* max_n, char* min_n)
{
        rewind(fp);
        fgets(temp,Lines,fp);
       
        register double t=0;
        register intll i=0;
        register intll cou=0;
        char *p=NULL;
        char *pb=NULL;
       
        while (fgets(temp,Lines,fp))
        {
                cou++;
                i=0;
                p=pb=strtok(temp,delim);
                do
                {
                        p=strtok(NULL,delim);
                        if (p == NULL) break;
                        t=atof(p);
                        if (t > *(max+i))
                        {
                                *(max+i) = t;
                                memmove(max_n+i*ns,pb,strlen(pb));
                                *(max_n+i*ns+strlen(pb))='\0';
                        }
                        if (t < *(min+i))
                        {
                                *(min+i) = t;
                                memmove(min_n+i*ns,pb,strlen(pb));
                                *(min_n+i*ns+strlen(pb))='\0';
                        }
                        *(sum+i)+=t;
                        i++;
                }while (1);
        }
        register intll j;
        for (j=0; j<nl-1; j++)
        {
                if (j < i) *(avg+j)=*(sum+j)/cou,*(count+j)=cou;
                else *(avg+j)=*(sum+j)/(cou-1),*(count+j)=cou-1;
        }
}
页: [1]
查看完整版本: 获取文件信息