【C语言】【windows】--获取文件属性的信息
erbi_lucifer吧
全部回复
仅看楼主
level 10
堕erbi 楼主

光影的世界……吾为光为影?
/**************************************************************************


**************************************************************************/

2012年02月26日 15点02分 1
level 10
堕erbi 楼主
今天在整【设置系统时间】……又在权限问题卡住了……[拍砖]……
12点断网,今天这篇帖子先上图,有时间再补上……
2012年02月26日 15点02分 2
level 10
堕erbi 楼主

程序名称:获取文件属性的信息
编译器:vs2010(其它也可以……)
程序大小:13K
文件包括:文件信息.exe ,msvcr100.dll
程序界面:
比windows资源管理器还精细……

2012年02月26日 15点02分 3
level 10
堕erbi 楼主

好吧,我承认……还是windows的资源管理器强大……[拍砖]
[瘫坐]…………[画圈圈]…………[墙角]………………

2012年02月26日 15点02分 4
level 10
堕erbi 楼主

用到的控件只有 :按钮(button)、标签(Static Text)和文本框(Edit Control)[背扭]
/***************************************************************************************
程序包括4个函数:
_tWinMain:主函数,弹出对话框。
DialogProc:处理按键等消息的函数
ShowTime:将得到的时间转换为系统时间并在文本框显示的函数
ShowAttributes:根据获得的属性attributes的不同,在文本框中显示…… [也不行]
/***************************************************************************************
2012年02月27日 02点02分 5
level 10
堕erbi 楼主

/***************************************************************************************
001:先了解有关函数……[揉脸]
得到控件上的文本……
GetDlgItemText(句柄, 控件ID,字符数组, 字符数组大小);
API函数打开文件
CreateFile(文件名, GENERIC_READ,FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
得到文件属性
GetFileAttributes(文件名);
得到文件的创建时间,访问时间,修改时间
GetFileTime( 文件句柄, &创建时间,&访问时间, &修改时间);
结束对话框
EndDialog(对话框句柄, 原因);
相当于strcat的函数:
_tcscat(字符数组1,字符数组2);
相当于sprintf的函数(将格式化内容接在字符数组后面)
如:Wsprintf(字符数组,_T(“像printf一样有%d之类的”),112);
/***************************************************************************************[星星闪]
2012年02月27日 02点02分 6
level 10
堕erbi 楼主

消息处理函数中,WM_COMMAND 是按钮被按下的消息,包括点击菜单选项也是,接着根据得到的ID不同,就知道是哪个按钮被按下……
在属性处理函数ShowAttributes中,因为SetDlgItemText会更新文本框显示的内容……
而一个文件可能同时包含几种属性值,于是先用 GetDlgItemText把文本框之前显示的内容保存起来,在将需要输出的文字接在得到的内容后面,之后再次在文本框显示……
注:这个程序,主要注重思路,代码很简单,画控件更简单,只要有一点windows编程的基础就OK了……源代码已提供,自己动手试一下吧……
用对话框选择要打开的文件,然后将文件名显示在文本框里面……打开对话框可以参考:
https://tieba.baidu.com/p/1427689048 (9楼)

2012年02月27日 02点02分 7
level 10
堕erbi 楼主
/***************************************************************************************
以下开始代码:[我爱牛奶]
/***************************************************************************************
#include <tchar.h>
#include <Windows.h>
#include "resource.h"
#include <commdlg.h>
#include<stdio.h>
extern "C" __declspec(dllimport) int __stdcall SkinH_Attach();
#pragma comment(lib,"SkinH.lib")
struct KB{
int flag;
double kb; };//定义结构体,一个来放文件的大小,另一个是标志,在输出时根据标志来确定是B, KB,MB还是GB……
/***************************************************************************************
2012年02月27日 03点02分 9
level 10
堕erbi 楼主
/***************************************************************************************
获取文件类型:[飘过]
/***************************************************************************************
void ShowAttributes(HWND hwndLB, DWORD attributes)
{
TCHAR TCText[256];
SetDlgItemText(hwndLB,IDC_1,_T(""));
if (attributes & FILE_ATTRIBUTE_ARCHIVE)
{
GetDlgItemText(hwndLB,IDC_1,TCText,256);
_tcscat_s(TCText,_T(" 文件")); //相当于strcat,连接两个字符串
SetDlgItemText(hwndLB,IDC_1,TCText);
}
if (attributes & FILE_ATTRIBUTE_DIRECTORY)
{ GetDlgItemText(hwndLB,IDC_1,TCText,256);
_tcscat_s(TCText,_T(" 目录"));
SetDlgItemText(hwndLB,IDC_1,TCText);
}
if (attributes & FILE_ATTRIBUTE_HIDDEN)
{
GetDlgItemText(hwndLB,IDC_1,TCText,256);
_tcscat_s(TCText,_T(" 隐藏"));
SetDlgItemText(hwndLB,IDC_1,TCText);
}
if (attributes & FILE_ATTRIBUTE_NORMAL)
{
GetDlgItemText(hwndLB,IDC_1,TCText,256);
_tcscat_s(TCText,_T(" 一般"));
SetDlgItemText(hwndLB,IDC_1,TCText);
}
if (attributes & FILE_ATTRIBUTE_READONLY)
{
GetDlgItemText(hwndLB,IDC_1,TCText,256);
_tcscat_s(TCText,_T(" 只读"));
SetDlgItemText(hwndLB,IDC_1,TCText);
}
if (attributes & FILE_ATTRIBUTE_SYSTEM)
{
GetDlgItemText(hwndLB,IDC_1,TCText,256);
_tcscat_s(TCText,_T(" 系统"));
SetDlgItemText(hwndLB,IDC_1,TCText);
}
if (attributes & FILE_ATTRIBUTE_TEMPORARY)
{
GetDlgItemText(hwndLB,IDC_1,TCText,256);
_tcscat_s(TCText,_T(" 临时文件"));
SetDlgItemText(hwndLB,IDC_1,TCText);
}
}
[背扭]
2012年02月27日 03点02分 10
level 10
堕erbi 楼主

/***************************************************************************************
获取时间:[歪头]
/***************************************************************************************
参数一:句柄
参数二:时间结构体
参数三:输出位置的标志
void ShowTime(HWND hwndLB,FILETIME t,int FTyangshi)
{
FILETIME ft;
SYSTEMTIME st;
TCHAR TCTime[256]={0};
FileTimeToLocalFileTime(&t, &ft);//得到时间
FileTimeToSystemTime(&ft, &st);//转换为系统时间
wsprintf(TCTime,_T("%d年%d月%d日 %d:%d:%d"),st.wYear,st.wMonth,st.wDay,st.wHour ,st.wMinute,st.wSecond );
if(FTyangshi==1)SetDlgItemText(hwndLB,IDC_3,TCTime);
else if(FTyangshi==2)SetDlgItemText(hwndLB,IDC_4,TCTime);
else if(FTyangshi==3)SetDlgItemText(hwndLB,IDC_5,TCTime);
}[戳眼]

2012年02月27日 03点02分 11
level 10
堕erbi 楼主

/***************************************************************************************
转化[无聊]
/***************************************************************************************
KB KBChange(long kb)
{
KB kb1;
ZeroMemory(&kb1,sizeof(KB));
if(kb>=1024)
{
if(kb>=(1024*1024*1024)){ //GB
kb1.kb =kb/(1024.0*1024.0*1024.0);
kb1.flag =4;
}
else if(kb>=1024*1024){ //MB
kb1.kb=kb/(1024.0*1024.0);
kb1.flag=3;
}
else{ //KB
kb1.kb=kb/1024.0;
kb1.flag=2;
}
}
else {
kb1.kb=kb; //B
kb1.flag=1;
}
return kb1;
}
[郁闷]
2012年02月27日 03点02分 12
level 10
堕erbi 楼主
/***************************************************************************************
转化[无聊]
/***************************************************************************************
void GetInfo(HWND hwndDlg)
{
HANDLE fileHandle;
TCHAR TCFileName[256]={0};
GetDlgItemText(hwndDlg, IDC_EDIT1, TCFileName, 256);//得到文本框的文件名
fileHandle = CreateFile(TCFileName, GENERIC_READ,FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);//API函数打开文件
if (fileHandle == INVALID_HANDLE_VALUE) //错误处理
{
TCHAR OPERROR[50];
if(GetLastError()==32)MessageBox(hwndDlg,_T("文件已打开……"),_T("ERROR"),MB_OK|MB_ICONERROR);
else if(GetLastError()==2)MessageBox(hwndDlg,_T("文件未找到……"),_T("ERROR"),MB_OK|MB_ICONERROR);
else{
wsprintf(OPERROR,_T("文件打开错误,错误号码:%d\n"), GetLastError());
MessageBox(hwndDlg,OPERROR,_T("ERROR"),MB_OK|MB_ICONERROR);
}
}
else
{
//得到文件属性 GetFileAttributes
DWORD attributes = GetFileAttributes(TCFileName);
ShowAttributes(hwndDlg,attributes); //得到文件的创建时间,访问时间,修改时间GetFileTime
FILETIME create, lastWrite, lastAccess;
GetFileTime( fileHandle, &create,&lastAccess, &lastWrite);
ShowTime(hwndDlg,create,1);
ShowTime(hwndDlg,lastWrite,2);
ShowTime(hwndDlg,lastAccess,3); //得到文件大小 GetFileSize
DWORD sizeLo;
TCHAR TCFsize[100];
char tcfile[100];
KB kb;
ZeroMemory(&kb,sizeof(KB));
sizeLo = GetFileSize(fileHandle, NULL);
kb=KBChange(sizeLo);
HWND HWNDListBox = GetDlgItem(hwndDlg,IDC_2);
if(kb.flag ==1) //根据标志输出
{
sprintf_s(tcfile,"\n%f B",kb.kb);
}
else if(kb.flag ==2)
{
sprintf_s(tcfile,"\n%f KB",kb.kb);
}
else if(kb.flag==3)
{
sprintf_s(tcfile,"\n%f MB",kb.kb);
}
else if(kb.flag==4)
{
sprintf_s(tcfile,"\n%f GB",kb.kb);
}
MultiByteToWideChar(0,0,tcfile,sizeof(tcfile)/sizeof(char),TCFsize,sizeof(TCFsize)/sizeof(TCHAR));
SetDlgItemText(hwndDlg,IDC_2,TCFsize);
//得到文件的全路径名
TCHAR pathBuffer[MAX_PATH];
//TCHAR TCPath[MAX_PATH];
GetFullPathName(TCFileName, MAX_PATH,pathBuffer, NULL);
SetDlgItemText(hwndDlg,IDC_6,pathBuffer);
}
CloseHandle(fileHandle);
}
[在笼子里]…………

2012年02月27日 04点02分 13
level 10
堕erbi 楼主
/***************************************************************************************
消息处理函数……[无聊]
/***************************************************************************************
INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_COMMAND :
{
switch (wParam)
{
case IDOK :
{
GetInfo(hwndDlg);//得到并显示文件属性信息
}
break;
case IDCANCEL:
{
EndDialog(hwndDlg, IDCANCEL);
}
break;
case IDC_ABOUT:
{
MessageBox(hwndDlg,_T("试手的实验程序O(∩_∩)O哈哈~ \n公司:Erbi-lucifer \n作者:【Erbi-lucifer:光影】 \n时间:2012年1月20日15:06:30"),_T("光影软件"),MB_OK);
}
break;
case IDC_OPEN : //打开对话框
{
OPENFILENAME ofn;
TCHAR szFile[MAX_PATH]; //MAX_PATH 是系统定义的一个宏,260。Windows 操作系统文件路径的最大长度。
ZeroMemory(&ofn,sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.lpstrFile = szFile;
ofn.lpstrFile[0] = TEXT('\0');
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = TEXT("所有文件类型\0*.*\0Text\0*.TXT\0
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.hwndOwner = hwndDlg;
ofn.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
if (GetOpenFileName(&ofn))
{
SetDlgItemText(hwndDlg,IDC_EDIT1,szFile);
}
}
break;
default:break;
}
}
default:break;
} return 0;
}
[砍死你]……

2012年02月27日 04点02分 14
level 10
堕erbi 楼主

/***************************************************************************************
这货叫主函数……[飘过]
/***************************************************************************************
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
SkinH_Attach();//加载当前目录下名为“skinh.she”皮肤
DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DialogProc);
return 0;
}
[Kiss]以上……完成……
2012年02月27日 04点02分 15
1