精华内容
下载资源
问答
  • } 在Windows中,我建议使用system()函数并从命令行获取文件时间: #include int main(int argc, char **argv) { system("dir /T:C file_name"); return 0; } 您可以将system()的输出重定向到例如一个临时文件并从...

    在类

    Linux系统中,您可以使用stat函数,如下所示:

    #include

    #include

    #include

    int main(int argc, char **argv)

    {

    struct stat t_stat;

    stat("file_name", &t_stat);

    struct tm * timeinfo = localtime(&t_stat.st_ctime); // or gmtime() depending on what you want

    printf("File time and date: %s", asctime(timeinfo));

    return 0;

    }

    在Windows中,我建议使用system()函数并从命令行获取文件时间:

    #include

    int main(int argc, char **argv)

    {

    system("dir /T:C file_name");

    return 0;

    }

    您可以将system()的输出重定向到例如一个临时文件并从那里解析日期.

    或者使用这个解决方法https://stackoverflow.com/a/40504396/1422630,这使得windows’_stat与linux one stat兼容,基本上:

    #ifdef WIN32

    #define stat _stat

    #endif

    展开全文
  • Windows平台C语言获取文件的一些属性

    千次阅读 2013-05-26 11:03:21
    Windows平台有一个WIN32_FIND_DATA结构,用来存储文件的一些属性(这里指的属性和下面结构中文件属性成员不同。这里的属性是指下面结构的所有成员)。 该结构的定义如下。... // 文件创建时间 FILE

             Windows平台有一个WIN32_FIND_DATA结构,用来存储文件的一些属性(这里指的属性和下面结构中文件属性成员不同。这里的属性是指下面结构的所有成员)。

    该结构的定义如下。

    typedef struct _WIN32_FIND_DATA {
    DWORD dwFileAttributes; //文件属性
    FILETIME ftCreationTime; // 文件创建时间
    FILETIME ftLastAccessTime; // 文件最后一次访问时间
    FILETIME ftLastWriteTime; // 文件最后一次修改时间
    DWORD nFileSizeHigh; // 文件长度高32位
    DWORD nFileSizeLow; // 文件长度低32位
    DWORD dwReserved0; // 系统保留
    DWORD dwReserved1; // 系统保留
    TCHAR cFileName[ MAX_PATH ]; // 长文件名
    TCHAR cAlternateFileName[ 14 ]; // 8.3格式文件名
    } WIN32_FIND_DATA, *PWIN32_FIND_DATA;

            

    遍历文件:

            可以使用FindFirstFile()和 FindNextFile()函数可以得到 某个文件夹里面所有的文件(包括子文件夹)的WIN32_FIND_DATA结构信息。

            FindFirstFile的原型如下:

    HANDLE FindFirstFile(
       LPCTSTR lpFileName,
       LPWIN32_FIND_DATA lpFindFileData
    );

            FindFirstFile()函数中,第一个参数是一个字符串。可以是一个路径名或者文件名,并且支持通配符 * 和 ?。比如想查找D盘下的所有文件,可以写成D:\\*.* 或者 D:\\*。

            如果只想查找D盘下的txt文件,那么可以写成D:\\*.txt。

            第二个参数是指向WIN32_FIND_DATA结构体的一个指针。正如函数的名字FindFirstFile那样, 该函数会查找第一个符合查找条件的文件(使用通配符可以有多少文件满足查找条件)。然后把这个文件的一些信息写入这个结构里面。如果第一个参数没有使用通配符,而是一个文件名,那么将只能找到一个符合条件的文件。

            函数的返回值是一个句柄HANDLE,说白了也就是一个整型。这个返回值可以用来查找下一个符合查找条件的文件。这就是下面的FindNextFile函数了。如果函数调用失败,将返回INVALID_HANDLE_VALUE

            FindNextFile的原型如下

    BOOL FindNextFile(
      HANDLE hFindFile,
      LPWIN32_FIND_DATA lpFindFileData
    );

            第一个参数就是FindFirstFile函数的返回值。第二个参数和FindFirstFile一样,在一个指针,用来存放被查找到的文件的一些信息。

            如果查找成功,函数返回非0值。否则返回0。可以调用GetLastError()函数来查看失败原因。如果没有符合要求的文件了,那么也将返回0。此时,调用GetLastError()函数将返回ERROR_NO_MORE_FILES。

            在使用完上面两个函数后,要记得使用CloseFile(HANDLEhFindFile)函数来关闭这个句柄。

            上面三个函数需要包括windows.h头文件.

            说了这么多,下面给出一个例子代码。


    #include<iostream>
    #include<windows.h>
    using namespace std;
    
    int main()
    {
    	WIN32_FIND_DATA  fileAttr;
    	HANDLE  handle;
    	handle = FindFirstFile("D:\\*", &fileAttr);
    
    	if( handle == INVALID_HANDLE_VALUE ) 
    	{
    		cout<<"invalid handle value "<<GetLastError()<<endl;
    	}
    	else
    	{
    		cout<<fileAttr.cFileName<<endl; //输出查找到的文件名
    
    		while(  FindNextFile(handle, &fileAttr)  )
    		{
    			cout<<fileAttr.cFileName<<endl; //输出每一个查找到的文件名
    		}
    
    		if( GetLastError() == ERROR_NO_MORE_FILES )
    		{
    			cout<<"查找完毕"<<endl;
    		}
    		else 
    		{
    			cout<<"查找过程出现错误"<<endl;
    		}
    
    		FindClose(handle);
    	}
    
    	return 0;
    }
    

            上面的程序会遍历D盘下面的所有文件和文件夹。包括当前目录和父目录,这两个目录对应的文件名为.和..,即一个点和两个点。熟悉Linux的读者就很容易明白。

            也可以查找相对路径的文件,比如"*.txt",就查找当前目录下的所有txt文件

            如果在编译的时候出现了cannot convert 'const char*' to 'LPCWSTR' 错误,可以把WIN32_FIND_DATA换成WIN32_FIND_DATAA,即在最后追加一个A,FindFirstFile和FindNextFile也要追加一个A。



    文件属性:

            现在看一下WIN32_FIND_DATA结构的一些成员信息。



    大小属性:

            首先看一下文件的大小信息。该信息用了两个成员存储。分别是:

            DWORD  nFileSizeHigh;// 文件长度高32位

            DWORD  nFileSizeLow;// 文件长度低32位

            其中,单位是 字节数。

            由于nFileSizeHigh存储的是文件长度的高位,所以当文件的大小小于MAXDWORD时,该成员的值为0。最后,可以用 (nFileSizeHigh * (MAXDWORD+1)) +  nFileSizeLow 来计算文件大小。

            文件夹的大小是 0。

     

    文件类型属性:


            文件类型属性由dwFileAttributes成员指明。最常用的类型当然就是:普通文件和文件夹,分别对应FILE_ATTRIBUTE_ARCHIVE和FILE_ATTRIBUTE_DIRECTORY。更多的属性可以参照这里。因为一个文件可能包含多个属性,所以判断的时候使用诸如:FILE_ATTRIBUTE_ARCHIVE & dwFileAttributes。而不是使用==符号。



    时间属性:

            现在看一下与文件有关的时间属性。有三个时间,创建时间、访问时间、修改时间。三者都差不多。只需弄懂一个,其他两个就自然知道怎么用了。

            从文章最前面的WIN32_FIND_DATA结构体可以看到其ftCreationTime 成员是一个FILETIME类型。声明如下:

    typedef struct _FILETIME {
      DWORD dwLowDateTime;
      DWORD dwHighDateTime;
    } FILETIME, *PFILETIME;

            一眼看过去,都不知道怎么使用。就像C语言标准库里面的time()函数一样,返回一个从1970年到现在的秒数。这个值很难使用。还好Windows还提供了另外一个结构 SYSTEMTIME。其声明如下:

    typedef struct _SYSTEMTIME {
      WORD wYear;
      WORD wMonth;
      WORD wDayOfWeek;
      WORD wDay;
      WORD wHour;
      WORD wMinute;
      WORD wSecond;
      WORD wMilliseconds;
    } SYSTEMTIME, *PSYSTEMTIME;

            这个结构看起来才像人使用的,刚才那个完全是机器使用的。

            同样,Windows提供了两者相互转换的函数.

    BOOL FileTimeToSystemTime(
      const FILETIME *lpFileTime,
      LPSYSTEMTIME lpSystemTime
    );


    BOOL SystemTimeToFileTime(
      const SYSTEMTIME *lpSystemTime,
      LPFILETIME lpFileTime
    );

    两个函数都需要对应结构体的指针。

     

            还有一个东西需要注意。

            通过FindFirstFile、FindNextFile获取的WIN32_FIND_DATA结构。其FILETIME成员的值都是使用UTC时间,就是中学地理学的格林尼治时间。我们中国用东8区时间。所以我们还要在这些成员值的基础上加上 8 小时。微软不推荐我们直接对FILETIME结构进行 加上 或者减少 某个时间。如果我们要转换成我们当地的时间(就是从UTC时间转换成东8区时间),可以使用函数 FileTimeToLocalFileTime。其声明如下:

    BOOL FileTimeToLocalFileTime(
      const FILETIME *lpFileTime,
      LPFILETIME lpLocalFileTime
    );

             另外,不能就地修改。就是说,第一个参数和第二个参数要指向不同的内存。


             给一个例子吧。


    #include<iostream>
    #include<windows.h>
    using namespace std;
    
    ostream& operator << (ostream& os, const SYSTEMTIME& t)
    {
    	os<<t.wYear<<"-"<<t.wMonth<<"-"<<t.wDay<<"  ";
    	os<<t.wHour<<": "<<t.wMinute<<": "<<t.wSecond<<endl;
    	return os;
    }
    
    int main()
    {
    	
    	WIN32_FIND_DATA fileAttr;
    	HANDLE handle;
    	
    	SYSTEMTIME sysTime;
    	FILETIME localFileTime;
    	
    	handle = FindFirstFile("D:\\*.txt", &fileAttr);
    	
    	if( handle == INVALID_HANDLE_VALUE )
    	{
    		cout<<"invalid handle value "<<GetLastError()<<endl;
    	}
    	else
    	{
    		cout<<fileAttr.cFileName<<" size is "<<((fileAttr.nFileSizeHigh * (MAXDWORD+1))  +  fileAttr.nFileSizeLow) <<endl;
    		FileTimeToLocalFileTime(&fileAttr.ftCreationTime, &localFileTime); //转换成当地时间
    		
    		FileTimeToSystemTime(&localFileTime, &sysTime); //转换成人看的时间类型
    		cout<<sysTime<<endl;
    		
    		FindClose(handle);
    	}
    	
    	return 0;
    }
    









    展开全文
  • c语言经典案例

    2014-10-30 08:06:57
    文件中讲述了c语言经典的282个案例,由浅入深。有利于提高广大爱好c语言编程的人员。 其中包括: 第1章 初识C语言 1 实例001 第一个C语言程序 2 实例002 一个完整的C语言程序 2 实例003 输出名言 3 实例004 用TC ...
  • 使用系统时间作为创建的文件名

    千次阅读 2015-12-09 17:11:18
    这里给一个使用C语言获取系统时间,并转化为字符串打印输出的程序,仅供参考。不多说,上源码。 源码#include <time.h> #include <stdio.h> int main( void ) { time_t t = time(0); char tmp[6

    在工程开发过程中,我们经常要保存各类中文件‘.txt’, ‘.jpg’等。使用时间来作为文件名是最好的了。这里给一个使用C语言获取系统时间,并转化为字符串打印输出的程序,仅供参考。不多说,上源码。
    源码

    #include <time.h> 
    #include <stdio.h> 
    int main( void ) 
    { 
        time_t t = time(0); 
        char tmp[64]; 
        strftime( tmp, sizeof(tmp), "%Y%m%d%H%M%S.jpg",localtime(&t) ); 
        puts( tmp ); 
        return 0; 
    } 

    就是这么简单,关于输出更多的时间格式详见:(c++ 如何获取系统时间)http://blog.csdn.net/zjnig711/article/details/2419081 或官方资料。
    不过注意windows系统文件名中是不能有冒号的。

    展开全文
  • Linux C语言多线程应用

    2019-11-28 22:49:48
    创建2个线程,要求一个线程获取文件大小并输出, 另一个线程获取文件拥有者用户的权限并输出, 文件名由主线程提供。 源代码 /************************************************** *功能:创建2个线程,要求一个...

    实现功能

    创建2个线程,要求一个线程获取文件大小并输出,

    • 另一个线程获取文件拥有者用户的权限并输出,
    • 文件名由主线程提供。

    源代码

    /**************************************************
    *功能:创建2个线程,要求一个线程获取文件大小并输出,
    *	另一个线程获取文件拥有者用户的权限并输出,
    *	文件名由主线程提供。
    *作者:幻竹涂
    *时间:2019年11月28日。
    ***************************************************/
    
    #include <pthread.h>
    #include <stdio.h>
    #include <string.h>
    #include <string.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <stdlib.h>
    #include <sys/stat.h>
    
    void* func(void* arg)
    {
    	char* str= (char*)arg;
    	if(access(str,F_OK) < 0)
    	{
    		perror("access");
    		return NULL;
    	}
    	
    	int fd = open(str,O_RDONLY);
    	if(fd < 0)
    	{
    		perror("open");
    		return NULL;
    	}
    	
    	off_t* size = (off_t*)malloc(sizeof(off_t));
    	*size = lseek(fd,0,SEEK_END); 
    	close(fd);
    	pthread_exit(size);
    }
    
    void* func1(void* arg)
    {
    	char* str = (char*)arg;
    	if(access(str,F_OK) < 0)
    	{
    		perror("access");
    		return NULL;
    	}
    
    	struct stat buf;
    	if(stat(str,&buf) < 0)
    	{
    		perror("stat");
    		return NULL;
    	}
    
    	char* ugo = (char*)malloc(sizeof(char)*25);
    	//文件拥有者
    	strcpy(ugo,"USR:");
    	switch(buf.st_mode & S_IRWXU)
    	{
    		case S_IRUSR:	strcat(ugo,"r--");break;
    		case S_IWUSR:	strcat(ugo,"-w-");break;
    		case S_IXUSR:	strcat(ugo,"--x");break;
    		case S_IRUSR | S_IWUSR:	
    						strcat(ugo,"rw-");break;
    		case S_IRUSR | S_IXUSR:	
    						strcat(ugo,"r-x");break;
    		case S_IXUSR | S_IWUSR:	
    						strcat(ugo,"-wx");break;
    		case S_IRWXU:	strcat(ugo,"rwx");break;
    	}
    	
    	//文件组用户
    	strcat(ugo," group:");
    	switch(buf.st_mode & S_IRWXG)
    	{
    		case S_IRGRP:	strcat(ugo,"r--");break;
    		case S_IWGRP:	strcat(ugo,"-w-");break;
    		case S_IXGRP:	strcat(ugo,"--x");break;
    		case S_IRGRP | S_IWGRP:	
    						strcat(ugo,"rw-");break;
    		case S_IRGRP | S_IXGRP:	
    						strcat(ugo,"r-x");break;
    		case S_IXUSR | S_IWGRP:	
    						strcat(ugo,"-wx");break;
    		case S_IRWXG:	strcat(ugo,"rwx");break;
    	}
    	//文件其他用户
    	strcat(ugo," others:");
    	switch(buf.st_mode & S_IRWXO)
    	{
    		case S_IROTH:	strcat(ugo,"r--");break;
    		case S_IWOTH:	strcat(ugo,"-w-");break;
    		case S_IXOTH:	strcat(ugo,"--x");break;
    		case S_IROTH | S_IWOTH:	
    						strcat(ugo,"rw-");break;
    		case S_IROTH | S_IXOTH:	
    						strcat(ugo,"r-x");break;
    		case S_IXOTH | S_IWOTH:	
    						strcat(ugo,"-wx");break;
    		case S_IRWXO:	strcat(ugo,"rwx");break;
    	}
    	pthread_exit(ugo);
    }
    
    int main(int argc,char** argv)
    {
    	if(argc < 2)
    	{
    		printf("Usage:%s <pathfile>\n",argv[0]);
    		return -1;
    	}
    	
    	pthread_t ptid;
    	//文件大小
    	int err = pthread_create(&ptid,NULL,func,argv[1]);	
    	if(err)
    	{
    		puts(strerror(err));
    		return -1;
    	}
    	off_t* size;
    	pthread_join(ptid,(void**)&size);
    	printf("文件大小%ld\n",*size);
    
    	//文件权限
    	err = pthread_create(&ptid,NULL,func1,argv[1]);	
    	if(err)
    	{
    		puts(strerror(err));
    		return -1;
    	}
    	char* ugo;
    	pthread_join(ptid,(void**)&ugo);
    	printf("文件权限:%s \n",ugo);
    	
    	free(ugo);
    	return 0;
    }
    
    
    
    
    

    实现结果

    在这里插入图片描述

    展开全文
  • 你必须知道的495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 声明问题 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 *1.26 main的正确定义是什么...
  • C语言的科学和艺术.pdf

    热门讨论 2012-01-19 14:09:05
    15.2 c语言文件的使用 406 15.2.1 声明file*类型的变量 406 15.2.2 打开文件 406 15.2.3 执行i/o操作 407 15.2.4 关闭文件 407 15.2.5 标准文件 408 15.3 字符i/o 408 15.3.1 文件更新 410 15.3.2 在输入...
  • C语言通用范例开发金典.part2.rar

    热门讨论 2012-08-31 14:18:18
    范例1-93 文件的归并 269 ∷相关函数:K_Merge函数 1.6 查找 272 1.6.1 顺序表的查找 273 范例1-94 顺序表的查找 273 ∷相关函数:Search_Seq函数 1.6.2 静态树表的查找 276 范例1-95 静态树表的查找 276 ∷...
  • 上架时间:2008-4-15 出版日期:2008 年4月 开本:16开 页码:571 版次:4-1 编辑推荐  本书是编程语言先驱者Ivor Horton的经典之作,是C语言方面最畅销的图书品种之一,在世界范围内广受欢迎,口碑极佳。  本书的...
  • C语言通用范例开发金典.part1.rar

    热门讨论 2012-08-31 14:09:26
    范例1-93 文件的归并 269 ∷相关函数:K_Merge函数 1.6 查找 272 1.6.1 顺序表的查找 273 范例1-94 顺序表的查找 273 ∷相关函数:Search_Seq函数 1.6.2 静态树表的查找 276 范例1-95 静态树表的查找 276 ∷...
  • 《你必须知道的495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    《你必须知道的495个C语言问题》以问答的形式组织内容,讨论了学习或使用C语言的过程中经常遇到的一些问题。书中列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预...
  • 1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 13 声明问题 14 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 14 *1.26 main的正确...
  • Bam是一个构建系统,其重点是具有快速的构建时间和灵活的构建脚本。 它没有使用自定义语言,而是使用Lua来描述构建步骤。 它是用纯净的C语言编写的,并在自由的zlib许可下发行。 在许多平台上可用,包括但不限于...
  • 监听文件是否改变

    2012-12-12 14:21:32
    5、程序开始监视该目录本身以及该目录下所有子目录和文件,若有任何变动(包括文件/文件夹重命名、移动、复制、删除、修改、新建等),则在屏幕打印“目录被改动![时间:(输出变动时间)]” 6、监视过程中,若用户...
  • 分析PE文件时,在PE文件头中有一项表明该文件创建时间,是从1970-1-1零点零分到当前时间系统所偏移的秒数时间:可以使用C语言的localtime( ) gmtime( )函数来得到对应的更直观的时间。还可以使用python来更快的...
  • 20210515 first

    2021-05-15 10:53:12
    C语言获取系统时间 在学习I/O文件操作时遇到了关于时间函数的问题,在这里进行记录,有误之处 请指出!第一次发博客,多多担待嘿嘿 包含头文件 : #include <time.h> 创建 time_t类型 变量 ,此类型为...
  • freecplus框架-ftp客户端

    2020-03-29 22:02:58
    2、安装配置ftp服务器3、配置防火墙4、准备测试的文件五、示例程序1、获取服务器文件列表、时间和大小2、把文件上传到服务器3、从服务器下载文件六、版权声明 一、源代码说明 freecplus是一个Linux系统下的C/C++开源...
  • 2、安装配置ftp服务器3、配置防火墙4、准备测试的文件五、示例程序1、获取服务器文件列表、时间和大小2、把文件上传到服务器3、从服务器下载文件六、版权声明 一、源代码说明 freecplus是一个Linux系统下的C/C++开源...
  • Qt判断文件或文件夹是否存在及创建文件夹 https://blog.csdn.net/lusirking/article/details/51644782 QString字符串分割、截取 https://blog.csdn.net/u014252478/article/details/80034026 Qt执行...
  • python cookbook(第3版)

    2016-01-06 22:24:38
    5.13 获取文件夹中的文件列表 5.14 忽略文件名编码 5.15 打印不合法的文件名 5.16 增加或改变已打开文件的编码 5.17 将字节写入文本文件 5.18 将文件描述符包装成文件对象 5.19 创建临时文件和文件夹 5.20 ...
  •  6.6.6 获取磁盘“文件系统”名称  6.6.7 获取系统所有的磁盘驱动器  6.6.8 判断磁盘驱动器类型  6.7 本章小结  第7章 数据库技术程序设计  7.1 数据库的连接和遍历  7.1.1 数据库的连接  7.1.2 数据库的...
  •  6.6.6 获取磁盘“文件系统”名称  6.6.7 获取系统所有的磁盘驱动器  6.6.8 判断磁盘驱动器类型  6.7 本章小结  第7章 数据库技术程序设计  7.1 数据库的连接和遍历  7.1.1 数据库的连接  7.1.2 数据库的...
  •  6.6.6 获取磁盘“文件系统”名称  6.6.7 获取系统所有的磁盘驱动器  6.6.8 判断磁盘驱动器类型  6.7 本章小结  第7章 数据库技术程序设计  7.1 数据库的连接和遍历  7.1.1 数据库的连接  7.1.2 数据库的...
  • 精通matlab6.5

    2010-04-07 10:27:34
    12.1 C语言MEX文件的编写 12.2 MAT数据文件的应用 12.3 MATLAB引擎技术的应用 12.4 MATLAB中ActiveX技术的应用 12.5 MATLAB中DDE技术的应用 第十三章 Notebook 13.1 Notebook的安装 13.2 Notebook的启动 13.3 M-book...
  • 12.1 C语言MEX文件的编写 12.2 MAT数据文件的应用 12.3 MATLAB引擎技术的应用 12.4 MATLAB中ActiveX技术的应用 12.5 MATLAB中DDE技术的应用 第十三章 Notebook 13.1 Notebook的安装 13.2 Notebook的启动 ...
  • 本书全面介绍了应用C语言进行开发的各种技术和技巧,全书共分12章,内容包括基础知识、指针、数据结构、算法、数学应用、文件操作、库函数应用、图形图像、系统调用、加解密与安全性、游戏、综合应用等。全书共提供...
  • 但是我尝试寻找正确的方法和手段,为读者打开Windows底层知识宝库的大门,使读者可以在其中自由阅读,自己去获取所需知识。 目录概要: 入手篇 熟悉汇编 本书的第一部分,将帮助读者消除对汇编的恐惧,熟悉汇编...

空空如也

空空如也

1 2 3 4 5 6
收藏数 103
精华内容 41
关键字:

c语言获取文件创建时间

c语言 订阅