⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fileinfo.hpp

📁 一个完整的桌面日历程序
💻 HPP
📖 第 1 页 / 共 2 页
字号:
// ------------------------------------------------------------------------------------------------------------------------------------------------------
// -																																					-
// - File:			fileinfo.hpp.																														-
// -																																					-
// - Contents: 		Implementation of file related fct's.																								-
// -																																					-
// - Purpose:  		-																																	-
// -																																					-
// - Remarks:    	-																																	-
// -																																					-
// - Originator: 	Michael Mogensen, MM-IT Consult 2003.																								-
// -																																					-
// - Compiler:		MS Visual C++ ver6.0.																											    -
// -																																					-
// - Period:		29.04.03 - 00.00.00.																											    -
// -																																					-
// - Version:		1.00. 																																-
// -																																					-
// ------------------------------------------------------------------------------------------------------------------------------------------------------

// ------------------------------------------------------------------------------------------------------------------------------------------------------
// - Miscellaneous.																																		-
// ------------------------------------------------------------------------------------------------------------------------------------------------------

// ------------------------------------------------------------------------------------------------------------------------------------------------------
// - Header(s).																																			-
// ------------------------------------------------------------------------------------------------------------------------------------------------------
#pragma once
#include <ansiapi.h>
#include<io.h>
#include<objbase.h>
#include<shlobj.h>
#include <comdef.h>

// ------------------------------------------------------------------------------------------------------------------------------------------------------
// - Miscellaneous.																																		-
// ------------------------------------------------------------------------------------------------------------------------------------------------------

// ------------------------------------------------------------------------------------------------------------------------------------------------------
// - Global(s), predecleration(s).																														-
// ------------------------------------------------------------------------------------------------------------------------------------------------------
inline const int
dir_delete(const CString&);

inline const int
dir_remove(const CString&);

inline const bool
file_or_directory_exist(const CString&);

inline const bool
file_or_directory_remove(const CString&);

inline const CString
get_cur_dir();

inline const CString
get_file_info_directory(const CString&);

inline const CString
get_file_info_drive(const CString&);

inline const CString
get_file_info_extension(const CString&);

inline const CString
get_file_info_filename(const CString&);

inline const CString
get_file_info_filetitle(const CString&);

inline const CString
get_file_info_location(const CString&);

inline const CString
get_startup_dir();

inline const CString 
get_user(const CString &cstrNameInfo = CString(_T("<unknown>")));

inline const bool
get_vol(const CString&, CString&);

inline const bool
is_file(const CString&);

inline const bool
is_directory(const CString&);

inline const bool
is_file_dots(const CString&);

inline const HRESULT
shortcut_create(const CString&,
			    const CString&,
			    const CString&,
			    const CString&,
			    const CString&);

inline const HRESULT
shortcut_delete(const CString&,
			    const CString&,
				const bool bExactMatchEx = false); // On false it deletes objects that just begins with the name looked for.

inline const HRESULT
shortcut_edit(const CString&,
			  const CString&,
			  const CString&,
			  const CString&,
			  const CString&);

inline const HRESULT
shortcut_exist(const CString&,
			   const CString&,
			   const CString&,
			   const CString&,
			   const CString&);

// ------------------------------------------------------------------------------------------------------------------------------------------------------
// - CStdioFileEx.																																		-
// ------------------------------------------------------------------------------------------------------------------------------------------------------
class CStdioFileEx : public CStdioFile
{
	public:
		// 1. Object. (alphabetical).
		CStdioFileEx() :
			CStdioFile()
			{}
		CStdioFileEx(FILE *pOpenStream) :
			CStdioFile(pOpenStream)
			{}
		CStdioFileEx(LPCTSTR lpszFileName, UINT uOpenFlags = CFile::modeCreate | CFile::modeReadWrite) :
			CStdioFile(lpszFileName, uOpenFlags)
			{}
			/*
			See MSDN, CFile::CFile, for more flags.

			CFile::modeCreate
			CFile::modeNoTruncate
			CFile::modeRead
			CFile::modeWrite
			CFile::modeReadWrite
			*/
		virtual ~CStdioFileEx()
		{ Close(); }
		// 4. Slaves. (alphabetical).
		inline const void CRLF(const int iNoOfCRLF = 1)
		{
			static const int iCR = 0x0D;
			static const int iLF = 0x0A;
			for(register int iId = 0; iId < iNoOfCRLF; iId++)
			{
				Write(&iCR, 1);
				Write(&iLF, 1);
			}
		}
		inline virtual BOOL Open(CString cstrFileName = CString(_T("")))
		{
			return CStdioFile::Open((LPCTSTR)cstrFileName, CFile::modeCreate | CFile::modeReadWrite);
		}
		inline const void TAB(const int iNoOfTABS = 1)
		{
			static const int iTAB = 0x09;
			for(register int iId = 0; iId < iNoOfTABS; iId++)
			{
				Write(&iTAB, 1);
			}
		}
		inline virtual void WriteString(const CString &cstrDump, const bool bCRLF = true)
		{
			static const int iLF = 0x0A;
			CStdioFile::WriteString((LPCTSTR)cstrDump); // Puts the CR.
			if(bCRLF)
				Write(&iLF, 1);
		}
};

// ------------------------------------------------------------------------------------------------------------------------------------------------------
// - Global(s).																																			-
// ------------------------------------------------------------------------------------------------------------------------------------------------------
inline const int dir_delete(const CString &cstrPath)
// Delete all files in this directory but keeps the directory.
{
	WIN32_FIND_DATA fd;
	HANDLE hFile = 0;
	BOOL bResult = TRUE;
	CString cstrPathEx(_T(""));
	cstrPathEx.Format(TEXT("%s\\*.*"), (LPCTSTR)cstrPath);
	hFile = ::FindFirstFile((LPCTSTR)cstrPathEx, &fd);
	while(hFile != INVALID_HANDLE_VALUE && bResult)
	{
		const CString cstrFile(fd.cFileName);
		if(!is_file_dots(cstrFile))
		{
			cstrPathEx.Format(TEXT("%s\\%s"), (LPCTSTR)cstrPath, (LPCTSTR)cstrFile);
			::DeleteFile(cstrPathEx);
		}
		bResult = ::FindNextFile(hFile, &fd);
	}
	return 0;
}

inline const int dir_remove(const CString &cstrPath)
// Delete all files in this directory and then deletes the library. Return number of files deleted.
{
	const int iSize = dir_delete(cstrPath);
	::RemoveDirectory(cstrPath);
	return iSize;
}

inline const bool file_or_directory_exist(const CString &cstrFile)
// Return T if this file or directory exist and F is not.
{
	try
	{
		struct _finddata_t c_file;
		return(::_findfirst((LPCTSTR)cstrFile, &c_file) != -1L);
	}
	catch(...)
	{
	}
	return false;
}

inline const bool file_or_directory_remove(const CString &cstrFile)
// Return T if this file or directory are deleted and F is not.
{ CFile::Remove(cstrFile); return true; }

inline const CString get_cur_dir()
// Return current directory.
{
	TCHAR pszBuffer[MAX_PATH];
	::GetCurrentDirectory(MAX_PATH, pszBuffer);
	CString cstrBuffer(pszBuffer);
	cstrBuffer.MakeLower();
	return cstrBuffer;
}

inline const CString get_file_info_directory(const CString &cstrFile)
// Return clean direcitry - like "\path_a\path_b" (where orig. direcitry returned from 
// splitpath(...) is "\path_a\path_b\").
#ifdef _UNICODE
{
	try
	{
		const _bstr_t bstrFile(cstrFile);
		_bstr_t bstrDrive(bstrFile);
		_bstr_t bstrDirectory(bstrFile);
		_bstr_t bstrTitle(bstrFile);
		_bstr_t bstrExtension(bstrFile);
		::_wsplitpath(
			(const wchar_t*)bstrFile, 
			(wchar_t*)bstrDrive, 
			(wchar_t*)bstrDirectory, 
			(wchar_t*)bstrTitle, 
			(wchar_t*)bstrExtension);
		CString cstrDirectory((const char*)bstrDirectory);
		const int iLength = cstrDirectory.GetLength();
		if(iLength > 0 && cstrDirectory.Right(1) == CString(TCHAR('\\')))
			cstrDirectory = cstrDirectory.Left(iLength - 1);
		return cstrDirectory;
	}
	catch(...)
	{
	}
	return CString(_T(""));
}
#else
{
	try
	{
		_bstr_t bstrDrive((LPCTSTR)cstrFile);
		_bstr_t bstrDirectory((LPCTSTR)cstrFile);
		_bstr_t bstrTitle((LPCTSTR)cstrFile);
		_bstr_t bstrExtension((LPCTSTR)cstrFile);
		::_splitpath(
			(LPCTSTR)cstrFile, 
			(char*)bstrDrive, 
			(char*)bstrDirectory, 
			(char*)bstrTitle, 
			(char*)bstrExtension);
		CString cstrDirectory((const char*)bstrDirectory);
		const int iLength = cstrDirectory.GetLength();
		if(iLength > 0 && cstrDirectory.Right(1) == CString(TCHAR('\\')))
			cstrDirectory = cstrDirectory.Left(iLength - 1);
		return cstrDirectory;
	}
	catch(...)
	{
	}
	return CString(_T(""));
}
#endif

inline const CString get_file_info_drive(const CString &cstrFile)
// Return clean drive - like "c" (where orig. drive returned from splitpath(...) is "c:").
#ifdef _UNICODE
{
	try
	{
		const _bstr_t bstrFile(cstrFile);
		_bstr_t bstrDrive(bstrFile);
		_bstr_t bstrDirectory(bstrFile);
		_bstr_t bstrTitle(bstrFile);
		_bstr_t bstrExtension(bstrFile);
		::_wsplitpath(
			(const wchar_t*)bstrFile, 
			(wchar_t*)bstrDrive, 
			(wchar_t*)bstrDirectory, 
			(wchar_t*)bstrTitle, 
			(wchar_t*)bstrExtension);
		CString cstrDrive((const char*)bstrDrive);
		if(cstrDrive.GetLength() == 2 && cstrDrive.Right(1) == CString(TCHAR(':')))
			return cstrDrive.Left(1);
	}
	catch(...)
	{
	}
	return CString(_T(""));
}
#else
{
	try
	{
		_bstr_t bstrDrive((LPCTSTR)cstrFile);
		_bstr_t bstrDirectory((LPCTSTR)cstrFile);
		_bstr_t bstrTitle((LPCTSTR)cstrFile);
		_bstr_t bstrExtension((LPCTSTR)cstrFile);
		::_splitpath(
			(LPCTSTR)cstrFile, 
			(char*)bstrDrive, 
			(char*)bstrDirectory, 
			(char*)bstrTitle, 
			(char*)bstrExtension);
		CString cstrDrive((const char*)bstrDrive);
		if(cstrDrive.GetLength() == 2 && cstrDrive.Right(1) == CString(TCHAR(':')))
			return cstrDrive.Left(1);
	}
	catch(...)
	{
	}
	return CString(_T(""));
}
#endif

inline const CString get_file_info_extension(const CString &cstrFile)
// Return clean extension - like "txt" (where orig. ext. returned from splitpath(...) is ".txt").
#ifdef _UNICODE
{
	try
	{
		const _bstr_t bstrFile(cstrFile);
		_bstr_t bstrDrive(bstrFile);
		_bstr_t bstrDirectory(bstrFile);
		_bstr_t bstrTitle(bstrFile);
		_bstr_t bstrExtension(bstrFile);
		::_wsplitpath(
			(const wchar_t*)bstrFile, 
			(wchar_t*)bstrDrive, 
			(wchar_t*)bstrDirectory, 
			(wchar_t*)bstrTitle, 
			(wchar_t*)bstrExtension);
		CString cstrExtension((const char*)bstrExtension);
		cstrExtension.TrimLeft(_T("."));
		return cstrExtension;
	}
	catch(...)
	{
	}
	return CString(_T(""));
}
#else
{
	try
	{
		_bstr_t bstrDrive((LPCTSTR)cstrFile);
		_bstr_t bstrDirectory((LPCTSTR)cstrFile);
		_bstr_t bstrTitle((LPCTSTR)cstrFile);
		_bstr_t bstrExtension((LPCTSTR)cstrFile);
		::_splitpath(
			(LPCTSTR)cstrFile, 
			(char*)bstrDrive, 
			(char*)bstrDirectory, 
			(char*)bstrTitle, 
			(char*)bstrExtension);
		CString cstrExtension((const char*)bstrExtension);
		cstrExtension.TrimLeft(_T("."));
		return cstrExtension;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -