[WinAPI] API 14 [获取、设置文件属性和时间]
2014-03-13 22:02
302 查看
>_< 为了获取文件属性,用户可以使用GetFileAttributes与GetFileAttributesEx函数。
GetFileAttributesEx函数除了返回文件属性外,还返回文件时间信息、文件大小等。
GetFileAttributesEx将返回结果保存在WIN32_FILE_ATTRIBUTE DATA结构中。
>_< 获取的文件时间是以FILETIME格式存在的,如果要正确显示,还需要对其时区进行调整,调整为本地时区,然后转换为系统时间格式,便于显示。
>_< 前面在获取文件大小时已经介绍,NTFS文件系统使用了64位数据来表示文件大小。因为32位的数据最多只能表示4GB的大小。Windows将其分为了高32位和低32位,两个都需要使用到,这一点尤其要在对大于4GB的文件操作时注意。
(1)GetFileAttributeS。
获取文件或目录的属牲
◇参数
lpFileName:输入参数,为需要获取属性的文件或目录。 、
◇返回值
返回DWORD值,表示文件属性。如果返回INVALID_FILE ATTRIBUTES,则表示失败。可使用GetLastError函数获取错误信息。
◇使用说明
要判断文件具体有哪些属性,需要使用“&”与属性常量进行运算,如果运行结果为真,则表示具有这种属性。
(2)GetFileAttributesEx。
获取文件或目录的属性、时间、大小,以WIN32_FILE ATTRIBUTE_DATA结构的形式返回结果
◇参数
lpFileName:输入参数,为需要获取属性的文件或目录。
flnfoLevelId:输入参数,是获取文件属性信息的类别,会影响到lpFileInformation参数具体采用什么形式输出结果。但是本参数一般只能指定为GetFileExInfoStandard。
lpFileInformation:输出参数,用于返回结果。如果flnfoLevelId参数指定为GetFileExInfoStandard,则为LPWIN32_FILE_ATTRIBUTE_ DATA类型。
◇返回值
返回BOOL值,表示是否成功。
(3) SetFileAttributes.
设置文件或目录的属性
◇参数
lpFileName:输入参数,为需要设置属性的文件或目录。
dwFileAttributes:文件属性值。
◇返回值
返回BOOL值,表示是否成功。
◇使用说明
文件系统中对文件属性的表示使用了DWORD类型的数据,多个文件属性使用“【”运算连接在一起
(4)FileTimeToLocalFileTime。
把文件时间转换为本地的文件时间
◇参数
lpFileTime:输入参数,为需要转换的文件时间。
lpLocalFileTime:输出参数,为指向转换后的文件时间。
◇返回值
返回BOOL值,表示是否成功。
(5)FileTimeToSystemTime
将文件时间转换为系统时间(SYSTEMTIME格式),便于显示
◇参数
lpFileTime:输入参数,指向需要转换的文件时间。
lpSystemTime:输出参数,指向转换后的SYSTEMTIME。
◇返回值
返回BOOL值,表示是否成功。
>_< 关键数据结构
(1) FILETIM。
此结构用最小的数据量表示的时间,但是不便于用户查看和显示。通过API获取的系统时间都是这种格式的。如果要使用显示,可以使用FileTimeToSystemTime转换为便于显示的SYSTEMTIME结构
(2) SYSTEMTIME。
此结构使用了较为直观的方式表示时间。
(3) WIN32_FILE ATTRIBUTE_DATA。
GetFileAttributesEx使用这个结构表示返回结果,包括文件属性、文件创建时间、文件最后访问时间、文件最后写入时间和文件大小。
>>>本实例编译完成后是一个可执行文件,运行时需输入两个参数,均是文件路径,程序将第一个参数所指向的文件和目录的属性显示出来,将第二个参数所指向的文件或目录设置为隐藏和只读。
GetFileAttributesEx函数除了返回文件属性外,还返回文件时间信息、文件大小等。
GetFileAttributesEx将返回结果保存在WIN32_FILE_ATTRIBUTE DATA结构中。
>_< 获取的文件时间是以FILETIME格式存在的,如果要正确显示,还需要对其时区进行调整,调整为本地时区,然后转换为系统时间格式,便于显示。
>_< 前面在获取文件大小时已经介绍,NTFS文件系统使用了64位数据来表示文件大小。因为32位的数据最多只能表示4GB的大小。Windows将其分为了高32位和低32位,两个都需要使用到,这一点尤其要在对大于4GB的文件操作时注意。
(1)GetFileAttributeS。
获取文件或目录的属牲
◇参数
lpFileName:输入参数,为需要获取属性的文件或目录。 、
◇返回值
返回DWORD值,表示文件属性。如果返回INVALID_FILE ATTRIBUTES,则表示失败。可使用GetLastError函数获取错误信息。
◇使用说明
要判断文件具体有哪些属性,需要使用“&”与属性常量进行运算,如果运行结果为真,则表示具有这种属性。
(2)GetFileAttributesEx。
获取文件或目录的属性、时间、大小,以WIN32_FILE ATTRIBUTE_DATA结构的形式返回结果
◇参数
lpFileName:输入参数,为需要获取属性的文件或目录。
flnfoLevelId:输入参数,是获取文件属性信息的类别,会影响到lpFileInformation参数具体采用什么形式输出结果。但是本参数一般只能指定为GetFileExInfoStandard。
lpFileInformation:输出参数,用于返回结果。如果flnfoLevelId参数指定为GetFileExInfoStandard,则为LPWIN32_FILE_ATTRIBUTE_ DATA类型。
◇返回值
返回BOOL值,表示是否成功。
(3) SetFileAttributes.
设置文件或目录的属性
◇参数
lpFileName:输入参数,为需要设置属性的文件或目录。
dwFileAttributes:文件属性值。
◇返回值
返回BOOL值,表示是否成功。
◇使用说明
文件系统中对文件属性的表示使用了DWORD类型的数据,多个文件属性使用“【”运算连接在一起
(4)FileTimeToLocalFileTime。
把文件时间转换为本地的文件时间
◇参数
lpFileTime:输入参数,为需要转换的文件时间。
lpLocalFileTime:输出参数,为指向转换后的文件时间。
◇返回值
返回BOOL值,表示是否成功。
(5)FileTimeToSystemTime
将文件时间转换为系统时间(SYSTEMTIME格式),便于显示
◇参数
lpFileTime:输入参数,指向需要转换的文件时间。
lpSystemTime:输出参数,指向转换后的SYSTEMTIME。
◇返回值
返回BOOL值,表示是否成功。
>_< 关键数据结构
(1) FILETIM。
此结构用最小的数据量表示的时间,但是不便于用户查看和显示。通过API获取的系统时间都是这种格式的。如果要使用显示,可以使用FileTimeToSystemTime转换为便于显示的SYSTEMTIME结构
(2) SYSTEMTIME。
此结构使用了较为直观的方式表示时间。
(3) WIN32_FILE ATTRIBUTE_DATA。
GetFileAttributesEx使用这个结构表示返回结果,包括文件属性、文件创建时间、文件最后访问时间、文件最后写入时间和文件大小。
>>>本实例编译完成后是一个可执行文件,运行时需输入两个参数,均是文件路径,程序将第一个参数所指向的文件和目录的属性显示出来,将第二个参数所指向的文件或目录设置为隐藏和只读。
// 获取、设置文件属性和时间 #include <windows.h> #include <stdio.h> /* 函数申明 */ DWORD ShowFileTime(PFILETIME lptime); DWORD ShowFileSize(DWORD dwFileSizeHigh,DWORD dwFileSizeLow); DWORD ShowFileAttrInfo(DWORD dwAttribute); DWORD SetFileHiddenAndReadonly(LPSTR szFileName); /* ************************************ * DWORD ShowFileAttributes(LPSTR szPath) * 功能 获取并显示文件属性, * 调用ShowFileTime、ShowFileSize和 * ShowFileAttrInfo函数 * * 参数 LPTSTR szPath,获取并显示此文件的属性 * * 返回值 0代表执行完成,1代码发生错误 **************************************/ DWORD ShowFileAttributes(LPSTR szPath) { //文件属性结构 WIN32_FILE_ATTRIBUTE_DATA wfad; printf("文件:%s\n",szPath); //获取文件属性 if(!GetFileAttributesExA(szPath, GetFileExInfoStandard, &wfad)) { printf("获取文件属性错误:%d\n",GetLastError()); return 1; } //显示相关时间 printf("创建时间:\t"); ShowFileTime(&(wfad.ftCreationTime)); printf("最后访问时间:\t"); ShowFileTime(&(wfad.ftLastAccessTime)); printf("最后修改时间:\t"); ShowFileTime(&(wfad.ftLastWriteTime)); //显示文件大小 ShowFileSize(wfad.nFileSizeHigh,wfad.nFileSizeLow); //显示文件属性 ShowFileAttrInfo(wfad.dwFileAttributes); return 0; } /* ************************************ * DWORD ShowFileAttrInfo(DWORD dwAttribute) * 功能 打印将文件属性 * * 参数 DWORD dwAttribute,文件属性 * * 返回值 0 **************************************/ DWORD ShowFileAttrInfo(DWORD dwAttribute) { //依次判断属性,并显示。 printf("文件属性:\t"); if(dwAttribute&FILE_ATTRIBUTE_ARCHIVE) printf("<ARCHIVE> "); if(dwAttribute&FILE_ATTRIBUTE_COMPRESSED) printf("<压缩> "); if(dwAttribute&FILE_ATTRIBUTE_DIRECTORY) printf("<目录> "); if(dwAttribute&FILE_ATTRIBUTE_ENCRYPTED) printf("<加密> "); if(dwAttribute&FILE_ATTRIBUTE_HIDDEN) printf("<隐藏> "); if(dwAttribute&FILE_ATTRIBUTE_NORMAL) printf("<NORMAL> "); if(dwAttribute&FILE_ATTRIBUTE_OFFLINE) printf("<OFFLINE> "); if(dwAttribute&FILE_ATTRIBUTE_READONLY) printf("<只读> "); if(dwAttribute&FILE_ATTRIBUTE_SPARSE_FILE) printf("<SPARSE> "); if(dwAttribute&FILE_ATTRIBUTE_SYSTEM) printf("<系统文件> "); if(dwAttribute&FILE_ATTRIBUTE_TEMPORARY) printf("<临时文件> "); printf("\n"); return 0; } /* ************************************ * DWORD ShowFileSize(DWORD dwFileSizeHigh, DWORD dwFileSizeLow) * 功能 打印文件大小信息 * * 参数 DWORD dwFileSizeHigh,文件大小高32位 * DWORD dwFileSizeLow,文件大小低32位 * * 返回值 0 **************************************/ DWORD ShowFileSize(DWORD dwFileSizeHigh, DWORD dwFileSizeLow) { ULONGLONG liFileSize; liFileSize = dwFileSizeHigh; //高们移动32位 liFileSize <<= sizeof(DWORD)*8; liFileSize += dwFileSizeLow; printf("文件大小:\t%I64u 字节\n",liFileSize); return 0; } /* ************************************ *DWORD ShowFileTime(PFILETIME lptime) * 功能 轮换文件时间,将打印 * * 参数 PFILETIME lptime,指向文件时间的指针 * * 返回值 0 **************************************/ DWORD ShowFileTime(PFILETIME lptime) { //文件时间结构 FILETIME ftLocal; //系统时间结构 SYSTEMTIME st; //调整为系统所在时区的时间 FileTimeToLocalFileTime( lptime, &ftLocal ); //将文件时间转换为SYSTEMTIME格式,便于显示。 FileTimeToSystemTime( &ftLocal, &st ); //显示时间信息字符串 printf("%4d年%.2d月%#02d日,%.2d:%.2d:%.2d\n", st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond); return 0; } /* ************************************ * DWORD SetFileHiddenAndReadonly(LPSTR szFileName) * 功能 将指定的文件设置为隐藏和只读 * * 参数 LPSTR szFileName,文件路径 * * 返回值 0 **************************************/ DWORD SetFileHiddenAndReadonly(LPSTR szFileName) { //获取原来的文件属性 DWORD dwFileAttributes = GetFileAttributesA(szFileName); //将只读和隐藏属性附加到原来的文件属性上 dwFileAttributes |= FILE_ATTRIBUTE_READONLY; dwFileAttributes |= FILE_ATTRIBUTE_HIDDEN; //设置文件属性,并判断是否成功。 if(SetFileAttributesA(szFileName, dwFileAttributes)) { printf("文件%s的隐藏和属性设置成功\n",szFileName); } else { printf("属性设置; %d\n",GetLastError()); } return 0; } /* ************************************ * int main(int argc, PCHAR argv[]) * 功能 设置和获取文件属性等 * * 参数 显示第一个参数指定文件的属性、时间、大小 * 将第二个参数的属性设置为隐藏、只读。 * * 返回值 0代表执行完成,1代码发生错误 **************************************/ int main(int argc, PCHAR argv[]) { char str1[100]; char str2[100]; printf("请输入参数\n"); scanf("%s",str1);scanf("%s",str2); ShowFileAttributes(str1); SetFileHiddenAndReadonly(str2); return 0; }
相关文章推荐
- SDK获取、设置文件属性和时间
- 获取、设置文件属性和时间
- C# 获取文件大小,创建时间,文件信息,FileInfo类的属性表
- 获取、设置文件的时间
- WinAPI: GetLocalTime、SetLocalTime、SetSystemTime - 获取与设置系统时间
- 怎么获取文件的“修改时间”属性。
- 获取指定文件夹下的所有文件+文件属性的获取与设置+文件夹属性的修改
- MFC中获取文件的属性(包括文件创建时间、修改时间、访问时间、文件大小等)
- 自动同步北京时间,需要启动jboss服务,然后运行127.0.0.1:8080即可,共两个jsp文件,一个获取时间,一个设置时间
- FileInfo 0.0.0005--masm32写的获取文件属性、版本、时间、MD5、SHA1 等信息的小程序
- VC++ 获取文件属性创建时间、修改时间和访问时间
- PB 调用API获取文件的创建时间、访问时间、修改时间
- 获取文件的属性,时间等等
- Date和Long之间互换,实现文件打开时间的的设置和获取
- [WinAPI] API 5 [遍历驱动器并获取驱动器属性]
- WinAPI: GetDoubleClickTime、SetDoubleClickTime - 获取与设置鼠标双击间隔时间
- spring 通过@Value 获取properties文件中设置了属性 ,与@Value # 和$的区别
- 获取文件时间属性
- [WinAPI] API 5 [遍历驱动器并获取驱动器属性]
- 文件属性,获取,设置文件属性chown stat函数