#include"stdafx.h"
#include <windows.h>
#define DATALEN 56
#define KEY_SIZE 8
typedef struct _RECORD {
TCHAR key[KEY_SIZE];
TCHAR data[DATALEN];
} RECORD;
#define RECSIZE sizeof (RECORD)
int Comp(const void *p1,const void *p2)
{
return _tcsncmp ((LPCSTR)p1, (LPCTSTR)p2, KEY_SIZE);
}
int _tmain (int argc, LPTSTR argv[])
{
HANDLE hFile=INVALID_HANDLE_VALUE,hMap=NULL;
LPVOID pFile=NULL;
LARGE_INTEGER fileSize;
TCHAR tempFile[MAX_PATH];
LPTSTR pTFile;
CopyFileA("e:\\large.txt",tempFile,TRUE);
hFile=CreateFile(tempFile,GENERIC_READ|GENERIC_WRITE,
0,NULL,OPEN_EXISTING,0,NULL);
GetFileSizeEx(hFile,&fileSize);
fileSize.QuadPart+=2;
hMap=CreateFileMapping(hFile,NULL,PAGE_READWRITE,fileSize.HighPart,fileSize.LowPart,NULL);
pFile=MapViewOfFile(hMap,FILE_MAP_ALL_ACCESS,0,0,0);
qsort(pFile,(SIZE_T)fileSize.QuadPart / RECSIZE,RECSIZE,Comp);
pTFile=(LPTSTR)pFile;
pTFile[fileSize.QuadPart]='\0';
_tprintf(_T("%s"),pFile);
UnmapViewOfFile(pFile);
CloseHandle(hMap);
DeleteFile(tempFile);
system("pause");
return 0;
}
待排序内容格式如下:
部分排序结果如下: