MCPcopy Create free account
hub / github.com/derceg/explorerplusplus / StartMerging

Method StartMerging

Explorer++/Explorer++/MergeFilesDialog.cpp:534–597  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

532}
533
534void MergeFiles::StartMerging()
535{
536 LARGE_INTEGER lMergeFileSize;
537 int nFilesMerged = 1;
538 bool bStop = false;
539
540 HANDLE hOutputFile = CreateFile(m_strOutputFilename.c_str(), GENERIC_WRITE, 0, nullptr,
541 CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr);
542
543 if (hOutputFile == INVALID_HANDLE_VALUE)
544 {
545 PostMessage(m_hDlg, NMergeFilesDialog::WM_APP_OUTPUTFILEINVALID, 0, 0);
546 return;
547 }
548
549 PostMessage(m_hDlg, NMergeFilesDialog::WM_APP_SETTOTALMERGECOUNT,
550 static_cast<WPARAM>(m_FullFilenameList.size()), 0);
551
552 for (const auto &strFullFilename : m_FullFilenameList)
553 {
554 if (bStop)
555 {
556 break;
557 }
558
559 HANDLE hInputFile = CreateFile(strFullFilename.c_str(), GENERIC_READ, FILE_SHARE_READ,
560 nullptr, OPEN_EXISTING, 0, nullptr);
561
562 if (hInputFile != INVALID_HANDLE_VALUE)
563 {
564 GetFileSizeEx(hInputFile, &lMergeFileSize);
565
566 if (lMergeFileSize.QuadPart != 0)
567 {
568 auto buffer = std::make_unique<char[]>(lMergeFileSize.LowPart);
569
570 DWORD dwNumberOfBytesRead;
571 ReadFile(hInputFile, reinterpret_cast<LPVOID>(buffer.get()),
572 static_cast<DWORD>(lMergeFileSize.LowPart), &dwNumberOfBytesRead, nullptr);
573
574 DWORD dwNumberOfBytesWritten;
575 WriteFile(hOutputFile, reinterpret_cast<LPCVOID>(buffer.get()), dwNumberOfBytesRead,
576 &dwNumberOfBytesWritten, nullptr);
577 }
578
579 CloseHandle(hInputFile);
580
581 PostMessage(m_hDlg, NMergeFilesDialog::WM_APP_SETCURRENTMERGECOUNT, nFilesMerged, 0);
582
583 nFilesMerged++;
584
585 EnterCriticalSection(&m_csStop);
586 if (m_bstopMerging)
587 {
588 bStop = true;
589 }
590 LeaveCriticalSection(&m_csStop);
591 }

Callers 1

MergeFilesThreadMethod · 0.80

Calls 4

GetFileSizeExFunction · 0.85
c_strMethod · 0.80
sizeMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected