, . Windows 64- 32- ; Win64 .
, ( , 23 ) . , 3 , , . Win64 .
, , , . , .
:
. , , , .
, , . , , MapViewOfFile, .
:
, , :
1. . , GENERIC_READ.
2. , CreateFileMapping ( 3), SetFilePointer SetEndOfFile.
3. CreateFileMapping OpenFileMapping.
4. MapViewOfFile.
5. . UnmapViewOfFile MapViewOfFile.
6. , UnmapViewOfFile, CloseHandle CloseHandle .
:
atou ( 2.4) ASCII- Unicode, . , /. 5.3 , , .
|
|
, , , . , /, , . , , , NTFS , , . Web- , .
Windows NT NTFS.
, , .
. , . , , , , , . , 192 60 . , .
5.3 Asc2UnMM. , 2.4.
5.3. Asc2UnMM:
/* 5. Asc2UnMM.c: , . */
#include "EvryThng.h"
BOOL Asc2Un(LPCTSTR fin, LPCTSTR fOut, BOOL bFaillfExists) {
HANDLE hIn, hOut, hInMap, hOutMap;
LPSTR pIn, pInFile;
LPWSTR pOut, pOutFile;
DWORD FsLow, dwOut;
/* . */
hIn = CreateFile(fIn, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
hInMap = CreateFileMapping(hIn, NULL, PAGE_READONLY, 0, 0, NULL);
pInFile = MapViewOfFile(hInMap, FILE_MAP_READ, 0, 0, 0);
dwOut = bFailIfExists? CREATE NEW: CREATE ALWAYS;
hOut = CreateFile(fOut, GENERIC_READ | GENERIC_WRITE, 0, NULL, dwOut, FILE_ATTRIBUTE_NORMAL, NULL);
|
|
FsLow = GetFileSize (hIn, NULL); /* . */
hOutMap = CreateFileMapping(hOut, NULL, PAGE_READWRITE, 0, 2* FsLow, NULL);
pOutFile = MapViewOfFile(hOutMap, FILE_MAP_WRITE, 0, 0, (SIZE_T)(2 * FsLow));
/* ASCII Unicode. */
pIn = pInFile;
pOut = pOutFile;
while (pIn < pInFile + FsLow) {
*pOut = (WCHAR) *pIn;
pIn++;
pOut++;
}
UnmapViewOfFile(pOutFile);
UnmapViewOfFile(pInFile);
CloseHandle(hOutMap);
CloseHandle(hInMap);
CloseHandle(hIn);
CloseHandle(hOut);
return TRUE;
}
:
, . , , .
5.4 . , sortFL, 5.1 , 8- , . 5.5 .
<stdlib.h> qsort, . , , , KeyCompare 5.2.
. , , , , qsort. - / . , .
5.4. sortFL:
/* 5. sortFL. . .*/
/* : sortFL */
#include "EvryThng.h"
typedef struct _RECORD {
TCHAR Key[KEY_SIZE];
TCHAR Data[DATALEN];
} RECORD;
#define RECSIZE sizeof(RECORD)
int _tmain(int argc, LPTSTR argv[]) {
HANDLE hFile = INVALID_HANDLE_VALUE, hMap = NULL;
LPVOID pFile = NULL;
DWORD FsLow, Result = 2;
TCHAR TempFile[MAX_PATH];
LPTSTR pTFile;
/* , , . */
/* -, . */
_stprintf(TempFile, _T("%s%s"), argv[1], _(".tmp"));
CopyFile(argv[1], TempFile, TRUE);
Result = 1; /* . */
/* . */
hFile = CreateFile(TempFile, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
FsLow = GetFileSize(hFile, NULL);
hMap = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, FsLow + TSIZE, NULL);
pFile = MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0 /* FsLow + TSIZE */, 0);
qsort(pFile, FsLow / RECSIZE, RECSIZE, KeyCompare);
/* KeyCompare 5.2. */
/* . */
pTFile = (LPTSTR)pFile;
pTFile[FsLow/TSIZE] = '\0';
_tprintf(_T("%s"), pFile);
UnmapViewOfFile(pFile);
CloseHandle(hMap);
CloseHandle(hFile);
DeleteFile(TempFile);
return 0;
}
, , . , , . , Web- , 5.4, , .