📄 cefind.c
字号:
//======================================================================
// CEFind - A Windows CE console file search application
//
// Written for the book Programming Windows CE
// Copyright (C) 1998 Douglas Boling
//======================================================================
#include <windows.h> // For all that Windows stuff
// Returns number of elements
#define dim(x) (sizeof(x) / sizeof(x[0]))
int SrchDirectory (LPTSTR pszDir);
//----------------------------------------------------------------------
// Global data
//
int nTotal = 0;
int nFiles = 0;
//======================================================================
// Program entry point
//
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPWSTR lpCmdLine, int nCmdShow) {
TCHAR pInput[256];
if (wcslen (lpCmdLine) == 0) {
printf ("USAGE: CEFIND filespec\n");
return 0;
}
printf ("\n"); // Initialize the console.
// We always start at the root.
if (*lpCmdLine != TEXT ('\\')) {
pInput[0] = TEXT ('\\');
} else
pInput[0] = L'\0';
wcscat (pInput, lpCmdLine);
// Perform recursive search.
SrchDirectory (pInput);
wprintf (L"\n %9d file(s) found. %d bytes.\n", nFiles, nTotal);
return 0;
}
//----------------------------------------------------------------------
// SrchDirectory - Recursive routine that searches a dir and all
// child dirs for matching files
//
int SrchDirectory (LPTSTR pszDir) {
WIN32_FIND_DATA fd;
TCHAR szNew[MAX_PATH];
INT i, rc, nErr = 0;
HANDLE hFind;
TCHAR *pPtr, *pSrcSpec;
// Separate subdirectory from search specification.
for (pSrcSpec = pszDir + lstrlen (pszDir); pSrcSpec >= pszDir;
pSrcSpec--)
if (*pSrcSpec == TEXT ('\\'))
break;
// Copy the search specification up to the last directory
// separation character.
if (pSrcSpec <= pszDir)
lstrcpy (szNew, TEXT ("\\"));
else {
for (i = 0; (i < dim(szNew)-10) &&
((pszDir+i) <= pSrcSpec); i++)
szNew[i] = *(pszDir+i);
szNew[i] = TEXT ('\0');
}
pPtr = szNew + lstrlen (szNew);
// Find matching files.
hFind = FindFirstFile (pszDir, &fd);
if (hFind != INVALID_HANDLE_VALUE) {
do {
// Report all matching files.
if (!(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
wprintf (L" %9d\t %s%s\n", fd.nFileSizeLow, szNew,
fd.cFileName);
nTotal += fd.nFileSizeLow;
nFiles++;
}
rc = FindNextFile (hFind, &fd);
} while (rc);
FindClose (hFind);
} else {
rc = GetLastError();
if ((rc != ERROR_FILE_NOT_FOUND) &&
(rc != ERROR_NO_MORE_FILES)) {
wprintf (L"1Find Error. Str:%s rc:%d", pszDir, rc);
return -1;
}
}
// Create generic search string for all directories.
lstrcat (szNew, TEXT ("*.*"));
hFind = FindFirstFile (szNew, &fd);
if (hFind != INVALID_HANDLE_VALUE) {
do {
if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
// Recurse to the lower directory
lstrcpy (pPtr, fd.cFileName);
lstrcat (pPtr, pSrcSpec);
nErr = SrchDirectory (szNew);
if (nErr) break;
*pPtr = TEXT ('\0');
}
rc = FindNextFile (hFind, &fd);
} while (rc);
FindClose (hFind);
} else {
rc = GetLastError();
if ((rc != ERROR_FILE_NOT_FOUND) &&
(rc != ERROR_NO_MORE_FILES)) {
wprintf (L"2Find Error:%d", rc);
return -1;
}
}
return nErr;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -