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

📄 dirproviderrs.h

📁 vc++6.0数据库编程大全一书得各个章节得源码,比较详细.可以仔细参照学习!
💻 H
字号:
// DirProviderRS.h : Declaration of the CDirProviderRowset
#ifndef __CDirProviderRowset_H_
#define __CDirProviderRowset_H_
#include "resource.h"       // main symbols
class CDirProviderWindowsFile
{
public:
    TCHAR    cFileName[ MAX_PATH ];
    TCHAR    cShortFileName[ 14 ]; 
    DWORD    nFileSize;
    TCHAR    strFileAttributes[7]; 
BEGIN_PROVIDER_COLUMN_MAP(CDirProviderWindowsFile)
    PROVIDER_COLUMN_ENTRY("FileName",       1, cFileName)
    PROVIDER_COLUMN_ENTRY("AltFileName",    2, cShortFileName)
    PROVIDER_COLUMN_ENTRY("FileSize",       3, nFileSize)
    PROVIDER_COLUMN_ENTRY("FileAttributes", 4, strFileAttributes)
END_PROVIDER_COLUMN_MAP()
};
// CDirProviderCommand
class ATL_NO_VTABLE CDirProviderCommand : 
	public CComObjectRootEx<CComSingleThreadModel>,
	public IAccessorImpl<CDirProviderCommand>,
	public ICommandTextImpl<CDirProviderCommand>,
	public ICommandPropertiesImpl<CDirProviderCommand>,
	public IObjectWithSiteImpl<CDirProviderCommand>,
	public IConvertTypeImpl<CDirProviderCommand>,
	public IColumnsInfoImpl<CDirProviderCommand>
{
public:
BEGIN_COM_MAP(CDirProviderCommand)
	COM_INTERFACE_ENTRY(ICommand)
	COM_INTERFACE_ENTRY(IObjectWithSite)
	COM_INTERFACE_ENTRY(IAccessor)
	COM_INTERFACE_ENTRY(ICommandProperties)
	COM_INTERFACE_ENTRY2(ICommandText, ICommand)
	COM_INTERFACE_ENTRY(IColumnsInfo)
	COM_INTERFACE_ENTRY(IConvertType)
END_COM_MAP()
// ICommand
public:
	HRESULT FinalConstruct()
	{
		HRESULT hr = CConvertHelper::FinalConstruct();
		if (FAILED (hr))
			return hr;
		hr = IAccessorImpl<CDirProviderCommand>::FinalConstruct();
		if (FAILED(hr))
			return hr;
		return CUtlProps<CDirProviderCommand>::FInit();
	}
	void FinalRelease()
	{
		IAccessorImpl<CDirProviderCommand>::FinalRelease();
	}
	HRESULT WINAPI Execute(IUnknown * pUnkOuter, REFIID riid, DBPARAMS * pParams, 
						  LONG * pcRowsAffected, IUnknown ** ppRowset);
	static ATLCOLUMNINFO* GetColumnInfo(CDirProviderCommand* pv, ULONG* pcInfo)
	{
		return CDirProviderWindowsFile::GetColumnInfo(pv,pcInfo);
	}
BEGIN_PROPSET_MAP(CDirProviderCommand)
	BEGIN_PROPERTY_SET(DBPROPSET_ROWSET)
		PROPERTY_INFO_ENTRY(IAccessor)
		PROPERTY_INFO_ENTRY(IColumnsInfo)
		PROPERTY_INFO_ENTRY(IConvertType)
		PROPERTY_INFO_ENTRY(IRowset)
		PROPERTY_INFO_ENTRY(IRowsetIdentity)
		PROPERTY_INFO_ENTRY(IRowsetInfo)
		PROPERTY_INFO_ENTRY(IRowsetLocate)
		PROPERTY_INFO_ENTRY(BOOKMARKS)
		PROPERTY_INFO_ENTRY(BOOKMARKSKIPPED)
		PROPERTY_INFO_ENTRY(BOOKMARKTYPE)
		PROPERTY_INFO_ENTRY(CANFETCHBACKWARDS)
		PROPERTY_INFO_ENTRY(CANHOLDROWS)
		PROPERTY_INFO_ENTRY(CANSCROLLBACKWARDS)
		PROPERTY_INFO_ENTRY(LITERALBOOKMARKS)
		PROPERTY_INFO_ENTRY(ORDEREDBOOKMARKS)
	END_PROPERTY_SET(DBPROPSET_ROWSET)
END_PROPSET_MAP()
};
class CDirProviderRowset : public CRowsetImpl< CDirProviderRowset, CDirProviderWindowsFile, CDirProviderCommand>
{
public:
	HRESULT Execute(DBPARAMS * pParams, LONG* pcRowsAffected)
	{
		USES_CONVERSION;
		BOOL bFound = FALSE;
		HANDLE hFile;
		LPTSTR  szDir = (m_strCommandText == _T("")) ? _T("*.*") : OLE2T(m_strCommandText);
		CDirProviderWindowsFile wf;
		WIN32_FIND_DATA fileInfo;
		hFile = FindFirstFile(szDir, &fileInfo);
		if (hFile == INVALID_HANDLE_VALUE)
			return DB_E_ERRORSINCOMMAND;
		LONG cFiles = 1;
		BOOL bMoreFiles = TRUE;
		while (bMoreFiles)
		{
			wf.nFileSize = fileInfo.nFileSizeLow;
			strcpy(wf.cFileName, fileInfo.cFileName);
			strcpy(wf.cShortFileName, fileInfo.cAlternateFileName);
			strcpy (wf.strFileAttributes, "");
			if (fileInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
				strcat(wf.strFileAttributes, "D");
			}
			if (fileInfo.dwFileAttributes &  FILE_ATTRIBUTE_READONLY) {
				strcat(wf.strFileAttributes, "R");
			}
			if (fileInfo.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM) {
				strcat(wf.strFileAttributes, "S");
			}
			if (fileInfo.dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE) {
				strcat(wf.strFileAttributes, "A");
			}
			if (fileInfo.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) {
				strcat(wf.strFileAttributes, "H");
			} 
			if (fileInfo.dwFileAttributes & FILE_ATTRIBUTE_TEMPORARY) {
				strcat(wf.strFileAttributes, "T");
			} 
			if (!m_rgRowData.Add(wf))
				return E_OUTOFMEMORY;
			bMoreFiles = FindNextFile(hFile, &fileInfo);
			cFiles++;
		}
		FindClose(hFile);
		if (pcRowsAffected != NULL)
			*pcRowsAffected = cFiles;
		return S_OK;
	}
};
#endif //__CDirProviderRowset_H_

⌨️ 快捷键说明

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