📄 fileinfo.hpp
字号:
// ------------------------------------------------------------------------------------------------------------------------------------------------------
// - -
// - 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 + -