NT 5.0 ( ) , . , .
SetVolumeMountPoint ( ) , . ,
SetVolumeMountPoint(":\\mycd\\, "D:\\");
D: ( -) mycd ( ), :. , . C:\mycd\memos\book.doc D:\memos\book.doc.
. DeleteMountPoint.
GetVolumePathName . , GetVolumeNameForVolumeMountPoint , , C:\, .
:
. 3.2 UNIX ls, , , .
, . , 1, . , , Windows, .
3.2 . , : , , (-R).
, , 3.2 , , :
lsW R include\*.h
, , :
lsW R C:\Projects\ls\Debug\*.obj
, . ( Web-) .
3.2. lsw:
/* 3. lsW */
|
|
/* lsW [] [] */
#include "EvryThng.h"
BOOL TraverseDirectory(LPCTSTR, DWORD, LPBOOL);
DWORD FileType(LPWIN32_FIND_DATA);
BOOL ProcessItem(LPWIN32_FIND_DATA, DWORD, LPBOOL);
int _tmain(int argc, LPTSTR argv[]) {
BOOL Flags [MAX_OPTIONS], ok = TRUE;
TCHAR PathName [MAX_PATH +1], CurrPath [MAX_PATH + 1];
LPTSTR pSlash, pFileName;
int i, FileIndex;
FileIndex = Options(argc, argv, _T("R1"), &Flags[0], &Flags[1], NULL);
I* "" " " . */
GetCurrentDirectory(MAX_PATH, CurrPath); /* . */
if (argc < FileIndex +1) /* . . */
ok = TraverseDirectory(_T("*"), MAX_OPTIONS, Flags);
else for (i = FileIndex; i < argc; i++) {
/* , . */
ok = TraverseDirectory(pFileName, MAX_OPTIONS, Flags) && ok;
SetCurrentDirectory(CurrPath);
/* . */
}
return ok? 0: 1;
}
static BOOL TraverseDirectory(LPCTSTR PathName, DWORD NumFlags, LPBOOL Flags)
/* ; ProcessItem . */
/* PathName: .*/
{
HANDLE SearchHandle;
WIN32_FIND_DATA FindData;
BOOL Recursive = Flags[0];
DWORD FType, iPass;
TCHAR CurrPath[MAX_PATH + 1];
GetCurrentDirectory(MAX_PATH, CurrPath);
for (iPass = 1; iPass <= 2; iPass++) {
/* 1: . */
/* 2: ( R). */
SearchHandle = FindFirstFile(PathName, &FindData);
do {
FType = FileType(&FindData);
/* ? */
if (iPass == 1) /* . */
ProcessItem(&FindData, MAX_OPTIONS, Flags);
if (FType == TYPE_DIR && iPass == 2 && Recursive) {
/* . */
_tprintf(_T ("\n%s\\%s:"), CurrPath, FindData.cFileName);
/* . */
SetCurrentDirectory(FindData.cFileName);
TraverseDirectory(_T("*"), NumFlags, Flags);
/* . */
SetCurrentDirectory(_T(".."));
}
} while (FindNextFile(SearchHandle, &FindData));
FindClose (SearchHandle);
}
return TRUE;
}
static BOOL ProcessItem(LPWIN32_FIND_DATA pFileData, DWORD NumFlags, LPBOOL Flags)
/* . */
{
const TCHAR FileTypeChar[] = {' ', 'd'};
DWORD FType = FileType(pFileData);
BOOL Long = Flags[1];
SYSTEMTIME LastWrite;
if (FType!= TYPE_FILE && FType!= TYPE_DIR) return FALSE;
_tprintf(_T ("\n"));
if (Long) { /* "-1"? */
_tprintf(_T("%c"), FileTypeChar[FType 1]);
_tprintf(_T("%10d"), pFileData->nFileSizeLow);
FileTimeToSystemTime(&(pFileData->ftLastWriteTime), &LastWrite);
_tprintf(_T(" %02d/%02d/%04d %02d:%02d:%02d"), LastWrite.wMonth, LastWrite.wDay, LastWrite.wYear, LastWrite.wHour, LastWrite.wMinute, LastWrite.wSecond);
}
_tprintf(_T(" %s"), pFileData->cFileName);
return TRUE;
}
static DWORD FileType(LPWIN32_FIND_DATA pFileData)
/* TYPE_FILE: ; TYPE_DIR: ; TYPE_DOT: . .. */
|
|
{
BOOL IsDir;
DWORD FType;
FType = TYPE_FILE;
IsDir = (pFileData->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)!= 0;
if (IsDir) if (lstrcmp(pFileData->cFileName, _T(".")) == 0 || lstrcmp(pFileData->cFileName, _T("..")) == 0) FType = TYPE_DOT;
else FType = TYPE_DIR;
return FType;
}
:
3.3 UNIX- touch, . 3.11 touch , .
3.3. touch:
/* 3. touch. */
/* touch [] [] */
#include "EvryThng.h"
int _tmain(int argc, LPTSTR argv[]) {
SYSTEMTIME SysTime;
FILETIME NewFileTime;
LPFILETIME pAccessTime = NULL, pModifyTime = NULL;
HANDLE hFile;
BOOL Flags[MAX_OPTIONS], SetAccessTime, SetModTime, CreateNew;
DWORD CreateFlag;
int i, FileIndex;
FileIndex = Options(argc, argv, _T("amc"), &Flags[0], &Flags[1], &Flags[2], NULL);
SetAccessTime =!Flags[0];
SetModTime =!Flags[1];
CreateNew =!Flags[2];
CreateFlag = CreateNew? OPEN_ALWAYS: OPEN_EXISTING;
for (i = FileIndex; i < argc; i++) {
hFile = CreateFile(argv[i], GENERIC_READ | GENERIC_WRITE, 0, NULL, CreateFlag, FILE_ATTRIBUTE_NORMAL, NULL);
GetSystemTime(&SysTime);
SystemTimeToFileTime(&SysTime, &NewFileTime);
if (SetAccessTime) pAccessTime = &NewFileTime;
if (SetModTime) pModifyTime = &NewFileTime;
SetFileTime(hFile, NULL, pAccessTime, pModifyTime);
CloseHandle(hFile);
}
return 0;
}