国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
一段代碼,演示W(wǎng)in32下超大文件讀寫

FROM http://blog.csdn.net/prsniper/article/details/50435456

一段代碼,演示在win32下讀寫4G以上的超大文件

上限為unsigned __int64,4G的平方字節(jié)

  1. // ****************************************************************************************************  
  2. // 文件: fs32demo\\main.cpp  
  3. // 作者: 虎膽游俠(blog.csdn.net/prsniper; cto@renshenguo.com)  
  4. // 時(shí)間: 2015-12-30 06:02:11  
  5. // 注釋:  
  6. // Win32下超大文件讀寫演示程序, Demonstration for large file operation in win32  
  7. // ****************************************************************************************************  
  8. #include <windows.h>  
  9. #include <stdio.h>  
  10.   
  11. // FS是起初想做File Splitter, 將大文件分割, 雖然只有部分?jǐn)?shù)據(jù)無意義, 但對于斷點(diǎn)續(xù)傳很關(guān)鍵  
  12. #define FS_ARG_COUNT        5  
  13.   
  14. // 用GUID作為共享內(nèi)存名稱避免重復(fù)  
  15. #define FS_OPEN_NAME        "Global\\LargeFileOpen{E4FCF358-8BF8-4b59-A046-CCF85620AC36}"  
  16. #define FS_SAVE_NAME        "Global\\LargeFileSave{E4FCF358-8BF8-4b59-A046-CCF85620AC36}"  
  17.   
  18. // 默認(rèn)的文件參數(shù)(本機(jī)調(diào)試使用)  
  19. #define FS_FILE_OPEN        "F:\\Win2003Ent.rar"  
  20. #define FS_FILE_SAVE        "F:\\Win2003Ent.rar.bak"  
  21. #define FS_FILE_SIZE        8316302716  
  22. #define FS_FILE_BYTE        0x10000000      // 256 MB (268435456)  
  23.   
  24. // 進(jìn)程退出代碼  
  25. #define FS_ERROR_SUCCESS            0  
  26. #define FS_ERROR_OPEN_FILE          1  
  27. #define FS_ERROR_OPEN_MAPPING       2  
  28. #define FS_ERROR_MULTI_OPEN         3  
  29. #define FS_ERROR_SAVE_FILE          4  
  30. #define FS_ERROR_SAVE_MAPPING       5  
  31. #define FS_ERROR_MULTI_SAVE         6  
  32. #define FS_ERROR_VIEW_OPEN          7  
  33. #define FS_ERROR_VIEW_SAVE          8  
  34. #define FS_ERROR_CLOSE_FILE         9  
  35.   
  36. // 類型定義  
  37. typedef unsigned __int64    QWORD;  
  38.   
  39. typedef struct tagLargeFile{  
  40.     HANDLE File;  
  41.     HANDLE Mapping;  
  42.     LPBYTE Buffer;  
  43.     union {  
  44.         struct {  
  45.             DWORD Bit32;  
  46.             DWORD Bit64;  
  47.         };  
  48.         QWORD Offset;  
  49.         QWORD Length;  
  50.     };  
  51. } LARGEFILE, *PLARGEFILE;  
  52.   
  53. // 入口函數(shù), 用法: fs32demo[.exe][ inputfile outputfile filesize cachesize]  
  54. int main(int argc, char **argv)  
  55. {  
  56.     LARGEFILE lfOpen;  
  57.     LARGEFILE lfSave;  
  58.   
  59.     char *szOpen;  
  60.     char *szSave;  
  61.     //QWORD nLength;    // use lfSave.Length  
  62.     DWORD dwSize;  
  63.   
  64.     union {  
  65.         struct {  
  66.             DWORD dwSizeLow;  
  67.             DWORD dwSizeHigh;  
  68.         };  
  69.         QWORD nSize;    // temp var  
  70.     };  
  71.     BOOL dwRet;  
  72.   
  73.     if(argc == FS_ARG_COUNT)  
  74.     {  
  75.         // 處理運(yùn)行參數(shù), 自動過濾引號: argv[0] == ...\\fs32demo.exe  
  76.         szOpen = argv[1];  
  77.         szSave = argv[2];  
  78.         lfSave.Length = _atoi64(argv[3]);   // 文件大小  
  79.         dwSize = atoi(argv[4]);             // 不應(yīng)超過2GB, 且小于文件大小  
  80.     }else  
  81.     {  
  82.         szOpen = FS_FILE_OPEN;  
  83.         szSave = FS_FILE_SAVE;  
  84.         lfSave.Length = FS_FILE_SIZE;  
  85.         dwSize = FS_FILE_BYTE;  
  86.     }  
  87.     // 輸出參數(shù)信息  
  88.     printf(" Input file: %s\r\n", szOpen);  
  89.     printf("Output file: %s\r\n", szSave);  
  90.     printf("  File size: 0x%I64X (%I64d bytes)\r\n", lfSave.Length, lfSave.Length);  
  91.     printf(" Cache size: 0x%08X (%d bytes)\r\n", dwSize, dwSize);  
  92.     printf("Press any key to fuck: \r\n");  
  93.     getchar();  // 任意鍵繼續(xù)  
  94.   
  95.     lfOpen.File = CreateFile(szOpen,        // file to fuck with  
  96.         GENERIC_READ,                       // 只讀打開  
  97.         FILE_SHARE_READ,                    // 共享讀取  
  98.         NULL,                               // &sa(默認(rèn)不能繼承)  
  99.         OPEN_EXISTING,                      // CREATE_ALWAYS  
  100.         FILE_ATTRIBUTE_NORMAL,  
  101.         NULL);  
  102.     if(lfOpen.File == INVALID_HANDLE_VALUE)  
  103.     {  
  104.         return FS_ERROR_OPEN_FILE;  
  105.     }  
  106.   
  107.     lfOpen.Mapping = CreateFileMapping(lfOpen.File,  
  108.         NULL,               // &sa  
  109.         PAGE_READONLY,      // 只讀共享內(nèi)存  
  110.         0,                  // 高雙字  
  111.         0,                  // 低雙字, 自動使用文件大小  
  112.         FS_OPEN_NAME);  
  113.     if(lfOpen.Mapping == NULL)  
  114.     {  
  115.         CloseHandle(lfOpen.File);   // system holds the corresponding file open until the last view of the file is unmapped.  
  116.         //lfOpen.File = NULL;  
  117.         return FS_ERROR_OPEN_MAPPING;  
  118.     }  
  119.     if(GetLastError() == ERROR_ALREADY_EXISTS)  
  120.     {  
  121.         // FS_ERROR_MULTI_OPEN, Proceed..  
  122.     }  
  123.   
  124.     lfSave.File = CreateFile(szSave,        // file to fuck with  
  125.         GENERIC_READ | GENERIC_WRITE,       // 讀寫打開  
  126.         FILE_SHARE_READ,                    // 共享讀取(不共享寫入)  
  127.         NULL,                               // &sa(默認(rèn)不能繼承)  
  128.         CREATE_ALWAYS,                      // OPEN_EXISTING  
  129.         FILE_ATTRIBUTE_NORMAL,  
  130.         NULL);  
  131.     if(lfSave.File == INVALID_HANDLE_VALUE)  
  132.     {  
  133.         CloseHandle(lfOpen.Mapping);  
  134.         CloseHandle(lfOpen.File);  
  135.         return FS_ERROR_SAVE_FILE;  
  136.     }  
  137.   
  138.     //lfSave.Offset = lfSave.Length;          
  139.     lfSave.Mapping = CreateFileMapping(lfSave.File,  
  140.         NULL,                       // &sa  
  141.         PAGE_READWRITE,             // 讀寫共享內(nèi)存  
  142.         lfSave.Bit64,               // 高雙字  
  143.         lfSave.Bit32,               // 低雙字  
  144.         FS_SAVE_NAME);  
  145.     if(lfSave.Mapping == NULL)  
  146.     {  
  147.         CloseHandle(lfSave.File);  
  148.         CloseHandle(lfOpen.Mapping);  
  149.         CloseHandle(lfOpen.File);  
  150.         return FS_ERROR_SAVE_MAPPING;  
  151.     }  
  152.     if(GetLastError() == ERROR_ALREADY_EXISTS)  
  153.     {  
  154.         CloseHandle(lfSave.Mapping);  
  155.         CloseHandle(lfSave.File);  
  156.         CloseHandle(lfOpen.Mapping);  
  157.         CloseHandle(lfOpen.File);  
  158.         return FS_ERROR_MULTI_SAVE;  
  159.     }  
  160.   
  161.     dwRet = FS_ERROR_SUCCESS;   // 默認(rèn)成功  
  162.     lfOpen.Offset = 0;  
  163.     while(lfOpen.Offset < lfSave.Length)  
  164.     {  
  165.         nSize = lfSave.Length - lfOpen.Offset;  
  166.         if(nSize > dwSize)  
  167.         {  
  168.             nSize = dwSize;  
  169.         }  
  170.         // 映射  
  171.         lfOpen.Buffer = (LPBYTE)MapViewOfFile(lfOpen.Mapping, FILE_MAP_READ, lfOpen.Bit64, lfOpen.Bit32, dwSizeLow);  
  172.         if(lfOpen.Buffer == NULL)  
  173.         {  
  174.             dwRet = FS_ERROR_VIEW_OPEN;  
  175.             break;  
  176.         }  
  177.         lfSave.Buffer = (LPBYTE)MapViewOfFile(lfSave.Mapping, FILE_MAP_ALL_ACCESS, lfOpen.Bit64, lfOpen.Bit32, dwSizeLow);  
  178.         if(lfOpen.Buffer == NULL)  
  179.         {  
  180.             UnmapViewOfFile(lfSave.Buffer);  
  181.             dwRet = FS_ERROR_VIEW_SAVE;  
  182.             break;  
  183.         }  
  184.         // memcpy & unmap  
  185.         printf("Offset: 0x%I64X, Size: 0x%08X; (%d bytes from %I64d)\r\n", lfOpen.Offset, dwSizeLow, dwSizeLow, lfOpen.Offset);  
  186.         CopyMemory(lfSave.Buffer, lfOpen.Buffer, dwSizeLow);  
  187.         UnmapViewOfFile(lfSave.Buffer);  
  188.         UnmapViewOfFile(lfOpen.Buffer);  
  189.         // next  
  190.         lfOpen.Offset += FS_FILE_BYTE;  
  191.     }  
  192.   
  193.     CloseHandle(lfSave.Mapping);  
  194.     CloseHandle(lfSave.File);  
  195.     CloseHandle(lfOpen.Mapping);  
  196.     if(CloseHandle(lfOpen.File) == FALSE)  
  197.     {  
  198.         return FS_ERROR_CLOSE_FILE; // ...  
  199.     }  
  200.     return dwRet;  
  201. }  

VC工程源碼下載地址:

CSDN: http://download.csdn.net/detail/prsniper/9384068

百度云盤 http://pan.baidu.com/s/1qXkGPcS


本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
在linux內(nèi)核中操作文件的方法
ROMFS文件系統(tǒng)分析
VC 實(shí)現(xiàn)獲取文件的CRC32值
038.同時(shí)顯示兩個(gè)文件的內(nèi)容
獲取Fs2You文件的真實(shí)地址
.NET實(shí)現(xiàn)word在線對比
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服