亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? filecopy.cpp

?? Windows via C/C++, Fifth Edition圖書源代碼
?? CPP
字號:
/******************************************************************************
Module:  FileCopy.cpp
Notices: Copyright (c) 2008 Jeffrey Richter & Christophe Nasarre
******************************************************************************/


#include "..\CommonFiles\CmnHdr.h"           // See Appendix A.
#include "..\CommonFiles\IOCompletionPort.h" // See Appendix A.
#include "..\CommonFiles\EnsureCleanup.h"    // See Appendix A.

#include <WindowsX.h>
#include "Resource.h"

// C RunTime Header Files
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>


///////////////////////////////////////////////////////////////////////////////


// Each I/O Request needs an OVERLAPPED structure and a data buffer
class CIOReq : public OVERLAPPED {
public:
   CIOReq() {
      Internal = InternalHigh = 0;   
      Offset = OffsetHigh = 0;   
      hEvent = NULL;
      m_nBuffSize = 0;
      m_pvData = NULL;
   }

   ~CIOReq() {
      if (m_pvData != NULL)
         VirtualFree(m_pvData, 0, MEM_RELEASE);
   }

   BOOL AllocBuffer(SIZE_T nBuffSize) {
      m_nBuffSize = nBuffSize;
      m_pvData = VirtualAlloc(NULL, m_nBuffSize, MEM_COMMIT, PAGE_READWRITE);
      return(m_pvData != NULL);
   }

   BOOL Read(HANDLE hDevice, PLARGE_INTEGER pliOffset = NULL) {
      if (pliOffset != NULL) {
         Offset     = pliOffset->LowPart;
         OffsetHigh = pliOffset->HighPart;
      }
      return(::ReadFile(hDevice, m_pvData, m_nBuffSize, NULL, this));
   }

   BOOL Write(HANDLE hDevice, PLARGE_INTEGER pliOffset = NULL) {
      if (pliOffset != NULL) {
         Offset     = pliOffset->LowPart;
         OffsetHigh = pliOffset->HighPart;
      }
      return(::WriteFile(hDevice, m_pvData, m_nBuffSize, NULL, this));
   }

private:
   SIZE_T m_nBuffSize;
   PVOID  m_pvData;
};


///////////////////////////////////////////////////////////////////////////////


#define BUFFSIZE              (64 * 1024) // The size of an I/O buffer
#define MAX_PENDING_IO_REQS   4           // The maximum # of I/Os


// The completion key values indicate the type of completed I/O.
#define CK_READ  1
#define CK_WRITE 2


///////////////////////////////////////////////////////////////////////////////


BOOL FileCopy(PCTSTR pszFileSrc, PCTSTR pszFileDst) {

   BOOL bOk = FALSE;    // Assume file copy fails
   LARGE_INTEGER liFileSizeSrc = { 0 }, liFileSizeDst;

   try {
      {
      // Open the source file without buffering & get its size
      CEnsureCloseFile hFileSrc = CreateFile(pszFileSrc, GENERIC_READ, 
         FILE_SHARE_READ, NULL, OPEN_EXISTING, 
         FILE_FLAG_NO_BUFFERING | FILE_FLAG_OVERLAPPED, NULL);
      if (hFileSrc.IsInvalid()) goto leave;

      // Get the file's size
      GetFileSizeEx(hFileSrc, &liFileSizeSrc);

      // Nonbuffered I/O requires sector-sized transfers.
      // I'll use buffer-size transfers since it's easier to calculate.
      liFileSizeDst.QuadPart = chROUNDUP(liFileSizeSrc.QuadPart, BUFFSIZE);

      // Open the destination file without buffering & set its size
      CEnsureCloseFile hFileDst = CreateFile(pszFileDst, GENERIC_WRITE, 
         0, NULL, CREATE_ALWAYS, 
         FILE_FLAG_NO_BUFFERING | FILE_FLAG_OVERLAPPED, hFileSrc);
      if (hFileDst.IsInvalid()) goto leave;

      // File systems extend files synchronously. Extend the destination file 
      // now so that I/Os execute asynchronously improving performance.
      SetFilePointerEx(hFileDst, liFileSizeDst, NULL, FILE_BEGIN);
      SetEndOfFile(hFileDst);

      // Create an I/O completion port and associate the files with it.
      CIOCP iocp(0);
      iocp.AssociateDevice(hFileSrc, CK_READ);  // Read from source file
      iocp.AssociateDevice(hFileDst, CK_WRITE); // Write to destination file

      // Initialize record-keeping variables
      CIOReq ior[MAX_PENDING_IO_REQS];
      LARGE_INTEGER liNextReadOffset = { 0 };
      int nReadsInProgress  = 0;
      int nWritesInProgress = 0;

      // Prime the file copy engine by simulating that writes have completed.
      // This causes read operations to be issued.
      for (int nIOReq = 0; nIOReq < _countof(ior); nIOReq++) {

         // Each I/O request requires a data buffer for transfers
         chVERIFY(ior[nIOReq].AllocBuffer(BUFFSIZE));
         nWritesInProgress++;
         iocp.PostStatus(CK_WRITE, 0, &ior[nIOReq]);
      }

      BOOL bResult = FALSE;
      
      // Loop while outstanding I/O requests still exist
      while ((nReadsInProgress > 0) || (nWritesInProgress > 0)) {

         // Suspend the thread until an I/O completes
         ULONG_PTR CompletionKey;
         DWORD dwNumBytes;
         CIOReq* pior;
         bResult = iocp.GetStatus(&CompletionKey, &dwNumBytes, (OVERLAPPED**) &pior, INFINITE);

         switch (CompletionKey) {
         case CK_READ:  // Read completed, write to destination
            nReadsInProgress--;
            bResult = pior->Write(hFileDst);  // Write to same offset read from source
            nWritesInProgress++;
            break;

         case CK_WRITE: // Write completed, read from source
            nWritesInProgress--;
            if (liNextReadOffset.QuadPart < liFileSizeDst.QuadPart) {
               // Not EOF, read the next block of data from the source file.
               bResult = pior->Read(hFileSrc, &liNextReadOffset);
               nReadsInProgress++;
               liNextReadOffset.QuadPart += BUFFSIZE; // Advance source offset
            }
            break;
         }
      }
      bOk = TRUE;
      }
   leave:;
   }
   catch (...) {
   }

   if (bOk) {
      // The destination file size is a multiple of the page size. Open the
      // file WITH buffering to shrink its size to the source file's size.
      CEnsureCloseFile hFileDst = CreateFile(pszFileDst, GENERIC_WRITE, 
         0, NULL, OPEN_EXISTING, 0, NULL);
      if (hFileDst.IsValid()) {
         
         SetFilePointerEx(hFileDst, liFileSizeSrc, NULL, FILE_BEGIN);
         SetEndOfFile(hFileDst);
      }
   }

   return(bOk);
}


///////////////////////////////////////////////////////////////////////////////


BOOL Dlg_OnInitDialog(HWND hWnd, HWND hWndFocus, LPARAM lParam) {

   chSETDLGICONS(hWnd, IDI_FILECOPY);

   // Disable Copy button since no file is selected yet.
   EnableWindow(GetDlgItem(hWnd, IDOK), FALSE);
   return(TRUE);
}


///////////////////////////////////////////////////////////////////////////////


void Dlg_OnCommand(HWND hWnd, int id, HWND hWndCtl, UINT codeNotify) {
   
   TCHAR szPathname[_MAX_PATH];

   switch (id) {
   case IDCANCEL:
      EndDialog(hWnd, id);
      break;

   case IDOK:
      // Copy the source file to the destination file.
      Static_GetText(GetDlgItem(hWnd, IDC_SRCFILE), 
         szPathname, _countof(szPathname));
      SetCursor(LoadCursor(NULL, IDC_WAIT));
      chMB(FileCopy(szPathname, TEXT("FileCopy.cpy")) 
         ? "File Copy Successful" : "File Copy Failed");
      break;

   case IDC_PATHNAME:
      OPENFILENAME ofn = { OPENFILENAME_SIZE_VERSION_400 };
      ofn.hwndOwner = hWnd;
      ofn.lpstrFilter = TEXT("*.*\0");
      lstrcpy(szPathname, TEXT("*.*"));
      ofn.lpstrFile = szPathname;
      ofn.nMaxFile = _countof(szPathname);
      ofn.lpstrTitle = TEXT("Select file to copy");
      ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST;
      BOOL bOk = GetOpenFileName(&ofn);
      if (bOk) {
         // Show user the source file's size
         Static_SetText(GetDlgItem(hWnd, IDC_SRCFILE), szPathname);
         CEnsureCloseFile hFile = CreateFile(szPathname, 0, 0, NULL, 
            OPEN_EXISTING, 0, NULL);
         if (hFile.IsValid()) {
            LARGE_INTEGER liFileSize;
            GetFileSizeEx(hFile, &liFileSize);
            // NOTE: Only shows bottom 32 bits of size
            SetDlgItemInt(hWnd, IDC_SRCFILESIZE, liFileSize.LowPart, FALSE);
         }
      }
      EnableWindow(GetDlgItem(hWnd, IDOK), bOk);
      break;
   }
}


///////////////////////////////////////////////////////////////////////////////


INT_PTR WINAPI Dlg_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {

   switch (uMsg) {
   chHANDLE_DLGMSG(hWnd, WM_INITDIALOG, Dlg_OnInitDialog);
   chHANDLE_DLGMSG(hWnd, WM_COMMAND,    Dlg_OnCommand);
   }
   return(FALSE);
}


///////////////////////////////////////////////////////////////////////////////


int WINAPI _tWinMain(HINSTANCE hInstExe, HINSTANCE, PTSTR pszCmdLine, int) {

   DialogBox(hInstExe, MAKEINTRESOURCE(IDD_FILECOPY), NULL, Dlg_Proc);
   return(0);
}


//////////////////////////////// End of File //////////////////////////////////

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色av成人天堂桃色av| xnxx国产精品| 精品午夜一区二区三区在线观看| 欧美国产精品一区二区三区| 宅男噜噜噜66一区二区66| 91黄色小视频| 国产欧美精品日韩区二区麻豆天美| 久久久久久综合| 国产欧美精品国产国产专区| 视频一区国产视频| 亚洲丶国产丶欧美一区二区三区| 亚洲激情自拍偷拍| 中文字幕在线观看一区二区| ...xxx性欧美| 国产成人综合自拍| 99re这里只有精品首页| 色一区在线观看| 91精品国产综合久久久久| 亚洲黄色片在线观看| 成人在线综合网| 欧美在线视频你懂得| 欧美日韩你懂得| 精品国产一区a| 国产亚洲欧美一级| 亚洲欧美日韩在线| 日本欧美久久久久免费播放网| 麻豆国产一区二区| 国产·精品毛片| 欧美日韩精品一区二区三区四区| 欧美电影免费观看高清完整版 | 欧美性猛片aaaaaaa做受| 7777精品伊人久久久大香线蕉完整版| 亚洲另类色综合网站| 91香蕉视频污在线| 欧美大胆一级视频| 麻豆国产精品官网| 精品久久国产老人久久综合| 中文字幕在线观看不卡| 欧美在线观看视频在线| 综合久久给合久久狠狠狠97色 | 精品精品国产高清一毛片一天堂| 免费xxxx性欧美18vr| av在线综合网| 欧美变态tickle挠乳网站| 男男视频亚洲欧美| 欧美mv和日韩mv国产网站| 国内成人精品2018免费看| 一本色道a无线码一区v| 一区二区三区蜜桃网| 国产成人自拍在线| 国产精品国产三级国产aⅴ原创| 日产国产高清一区二区三区| 欧美一区二区黄| 亚洲尤物在线视频观看| 国产激情偷乱视频一区二区三区| 欧美国产日韩一二三区| 一本久道久久综合中文字幕| 天天做天天摸天天爽国产一区| 国产成人综合在线观看| 自拍偷拍国产精品| 欧美一区二区三区四区高清 | 婷婷开心激情综合| 久久青草国产手机看片福利盒子| 国产**成人网毛片九色| 亚洲一区二区三区三| 日韩三区在线观看| 日本视频免费一区| 国产精品久久久爽爽爽麻豆色哟哟 | 欧美国产成人在线| 欧美日韩不卡视频| 国产成人激情av| 性欧美疯狂xxxxbbbb| 久久久无码精品亚洲日韩按摩| proumb性欧美在线观看| 日本欧美一区二区三区| 自拍偷拍亚洲欧美日韩| 欧美成人女星排行榜| 91香蕉国产在线观看软件| 免费xxxx性欧美18vr| 日韩一区有码在线| 久久久久久久久伊人| 欧美性生活久久| 成人一级视频在线观看| 麻豆91精品视频| 亚洲精品美国一| 欧美激情一区二区三区蜜桃视频| 欧美无砖专区一中文字| 99视频精品全部免费在线| 青娱乐精品在线视频| 亚洲女与黑人做爰| 国产精品无码永久免费888| 国模套图日韩精品一区二区 | 欧美性猛交xxxxxxxx| 国产精品亚洲综合一区在线观看| 久久综合久久综合久久| 欧美日韩中文精品| 99精品欧美一区二区三区小说 | 97久久精品人人澡人人爽| 韩日欧美一区二区三区| 日韩1区2区3区| 亚洲v精品v日韩v欧美v专区| 《视频一区视频二区| 国产蜜臀av在线一区二区三区| 日韩欧美黄色影院| 欧美一区二区成人| 欧美精品久久久久久久多人混战| 偷窥少妇高潮呻吟av久久免费| 中文字幕五月欧美| 国产精品乱子久久久久| 久久久久国产精品厨房| 久久久精品人体av艺术| 日韩美一区二区三区| 日韩一级大片在线| 欧美电影免费观看高清完整版在线 | 欧美精品一区二区三区四区| 欧美精品丝袜中出| 欧美肥胖老妇做爰| 欧美一卡二卡在线观看| 日韩一区二区三区免费观看| 91精品一区二区三区久久久久久| 91精品午夜视频| 日韩欧美国产综合在线一区二区三区| 91精品国产福利在线观看| 日韩一区二区视频| 日韩欧美在线不卡| 久久久久久久久久看片| 久久久国产综合精品女国产盗摄| 国产欧美视频一区二区| 综合久久久久久| 亚洲国产精品一区二区久久 | 久久国产精品一区二区| 亚洲欧美日韩国产一区二区三区| 亚洲手机成人高清视频| 亚洲精品国产成人久久av盗摄| 一片黄亚洲嫩模| 日本美女视频一区二区| 国内外成人在线| 99久久久久久99| 欧美日韩三级视频| 精品国产成人在线影院| 久久久久国产成人精品亚洲午夜| 中文乱码免费一区二区| 一卡二卡欧美日韩| 蜜桃视频在线一区| 99久久精品国产精品久久| 在线观看91视频| 2020日本不卡一区二区视频| 成人欧美一区二区三区白人| 午夜久久久久久久久久一区二区| 久久国产福利国产秒拍| 色综合中文字幕国产 | 日韩成人精品在线| 国产成人久久精品77777最新版本| 成人黄色小视频| 国产成人激情av| 欧美日韩精品专区| 中文字幕精品在线不卡| 天堂久久久久va久久久久| 国产毛片精品视频| 狠狠色狠狠色合久久伊人| 色综合久久六月婷婷中文字幕| 日韩情涩欧美日韩视频| 亚洲色图欧美在线| 国内精品国产成人国产三级粉色 | 不卡av免费在线观看| 91精品国产综合久久福利| 中文字幕不卡在线播放| 日本午夜一区二区| 色av综合在线| 日本一区免费视频| 精品一区二区在线免费观看| 欧洲精品视频在线观看| 国产精品视频一二三区| 狠狠色丁香婷婷综合久久片| 欧美影院午夜播放| 亚洲丝袜另类动漫二区| 国产精品影视网| 日韩一区二区三| 偷窥国产亚洲免费视频| 色综合天天视频在线观看| 国产女主播视频一区二区| 久久99日本精品| 日韩视频一区在线观看| 亚洲国产视频网站| 欧美亚洲图片小说| 亚洲激情五月婷婷| 99久久精品免费| 国产精品成人免费精品自在线观看| 老司机精品视频一区二区三区| 欧美人伦禁忌dvd放荡欲情| 亚洲日本免费电影| 99久久国产免费看| 国产精品国产三级国产有无不卡| 国产伦精品一区二区三区在线观看| 日韩一区二区三区在线| 午夜天堂影视香蕉久久| 欧美日韩色一区| 午夜精品影院在线观看| 欧美精选一区二区| 三级在线观看一区二区|