File Properties

Often we want to know the properties of a file like its full path, its date of creation, last access and last modification. Or we want to know whether the file is a hidden file, system file or read-only file. At such times, we simply right click on the filename (in Explorer or in any other software that can pop up a file dialog). From the context menu that appears we select the ‘Properties’ option and the OS shows all the file properties in a dialog box. We too can develop a program that can achieve this. Here is the code of this program.

#include "afxwin.h"

#include "afxdlgs.h"

#include "resource.h"

class myframe : public CFrameWnd

{

public :

myframe( )

{

Create ( 0, "File Properties", WS_OVERLAPPEDWINDOW, rectDefault, 0, MAKEINTRESOURCE (
IDR_MENU1 ) ) ;

}

void FileDialog( )

{

CString filename ,creat, modify,access ;

CString info, str1, str2, str3, str4 ;

CFileStatus fs ;

CFileDialog d ( 1, 0, 0, 0, "All Files|*.*||" ) ;

if ( d.DoModal( ) == IDOK )

filename = d.GetPathName( ) ;

CFile::GetStatus ( filename, fs ) ;

CTime cre, mod, acc ;

cre = fs.m_ctime ;

CString daystring ;

int day = cre.GetDayOfWeek( ) ;

daystring = getdaystring ( day ) ;

creat.Format ( " Creation Day & Date :- %s %d : %d : %d Creation Time :- %d : %d : %d ", daystring, cre.GetDay( ),

cre.GetMonth( ), cre.GetYear( ), cre.GetHour( ), cre.GetMinute( ), cre.GetSecond( ) ) ;

mod = fs.m_mtime ;day = mod.GetDayOfWeek( ) ;daystring = getdaystring ( day ) ;

modify.Format ( "Modified Day & Date :- %s %d : %d : %dModified Time :-%d : %d : %d ", daystring, mod.GetDay( ),
mod.GetMonth( ),mod.GetYear( ) , mod.GetHour( ), mod.GetMinute( ), mod.GetSecond( ) ) ;

acc = fs.m_atime ;

day = acc.GetDayOfWeek( ) ;

daystring = getdaystring ( day ) ;

access.Format("Accessed Day & Date :- %s %d : %d : %d ", daystring, acc.GetDay( ), acc.GetMonth( ), acc.GetYear( ) ) ;

str1 = str2 = str3 = str4 = "NO" ;

if ( ( fs.m_attribute & 0x01 ) == 0x01 )

str1 = "YES" ;

if ( ( fs.m_attribute & 0x02 ) == 0x02 )

str2 = "YES" ;

if ( ( fs.m_attribute & 0x04 ) == 0x04 )

str3 = "YES" ;

if ( ( fs.m_attribute & 0x20 ) == 0x20 )

str4 = "YES" ;

info.Format ( "FileName=%s \n\n size = %ld bytes \n\nReadOnly = %s \n\n Hidden = %s \n\nSystem = %s \n\n Archive = %s
\n\n %s \n\n %s \n\n %s", fs.m_szFullName, fs.m_size, str1, str2, str3, str4, creat, modify, access ) ;

MessageBox ( info ) ;

}

CString getdaystring ( int day )

{

CString str ;

switch ( day )

{

case 1 :

str = "Sunday" ;

break ;

case 2 :

str = "Monday" ;

break ;

case 3 :

str = "Tuesday" ;

break ;

case 4 :

str = "Wednesday" ;

break ;

case 5 :

str = "Thursday" ;

break ;

case 6 :

str = "Friday" ;

break ;

case 7 :

str = "Saturday" ;

break ;

}

return str ;

}

DECLARE_MESSAGE_MAP( )

} ;

BEGIN_MESSAGE_MAP ( myframe, CFrameWnd )

ON_COMMAND ( 101, FileDialog )

END_MESSAGE_MAP( )

class myapp : public CWinApp

{

public :

BOOL InitInstance( )

{

myframe *p ;

p = new myframe ;

m_pMainWnd = p ;

p -> ShowWindow ( SW_SHOWNORMAL ) ;

return TRUE ;

}

} ;

myapp a ;

On execution of the program a window appears with a menu attached to it. On selecting the menu item a file dialog is popped up. On selecting a file from this file dialog the properties of this file are shown in another dialog.

The file dialog is obtained by building a CFileDialog object and calling the member function DoModal( ) using it. Once the file is selected from this dialog its complete path is obtained using CFileDialog::GetPathName( ). This path name is passed to the GetStatus( ) static function of the CFile class. Along with the path a structure variable of the type CFileStatus is also passed. This structure is set up with the various file properties. These properties are then formatted properly and displayed in a dialog box. Note that the structure CFileStatus has been declared in the file ‘afx.h’.

No comments: