A GUI wrapper for Windows' built-in robocopy
and .xcopy
Easy to use copy/paste/move/delete dialog, just like your good old explorer, but much faster🚀
Support the new Windows 11 context menu, and the old windows context menu, with the fluent design icon adapted to Light/Dark theme
Confirmation Dialog
Integration with taskbar: a progress bar sync with the one inside the window
.cert
, click Install Certificate
. Choose Local Machine
in the dialog, click Next
Place all certificates in the following store
, click Browser
, and in the dialog choose Trusted root certification authorities
Next
and finally Finish
to install the certificate.msix
to install the app.
6*. In rare situations, you might need to restart explorer.exe
to see FastCopy
in the right-click context menuFastCopy
FastCopy\ --- Main project
FastCopyShellExtension\ --- A dll project for registering the new Windows context menu
SpeedTest\ --- A speed test project for measuring various copying method under Windows
UnitTest\ --- Unit test for above projects
FastCopy.sln --- The solution file for all the projects
vcpkg is the recommended package manager to handle these dependencies. You can install them with one command, and do no more.
vcpkg install boost-algorithm:x64-windows
vcpkg install spdlog:x64-windows
vcpkg install abseil:x64-windows
vcpkg install ftxui:x64-windows
vcpkg install cereal:x64-windows
Other component comes from my very own WinUIEssentials, which will be installed automatically by Visual Studio nuget.
Please install the Child Process Debugger, so that the debugger would break at the copying process (after you launch the settings process). That is, you run the program first (so it goes into settings), then copy-paste a file, then the debugger will break automatically. Strongly recommended!
For contribution to translation, there are 2 places to be translated:
FastCopy/Strings/<language>/Resources.resw
FastCopyShellExtension/CopyOperationNames.cpp CopyOperationNames::GetInstance()
Figma link, you may need to ask for permission.
robocopy
outputNew File 485 CMakeLists.txt 20:58 -> 20:58
This can be matched with staring with New File
and containing 4 segments after split with \t
std::string_view{line}.starts_with("New File");
std::vector<absl::string_view> v = absl::StrSplit(s.data(), "\t", absl::SkipEmpty());
/*
New File
485
CMakeLists.txt
xx:xx -> xx:xx
*/
New Dir 2000 D:\computecpp-sdk\.git\refs\
This can be matched with starting with New Dir
and containing 2 segments after split with \t
(the spacing between New Dir
and number are spaces, not \t
)
std::string_view{line}.starts_with("New Dir");
std::vector<std::string> splitted = absl::StrSplit(absl::string_view{ line.data(), line.length() }, "\t", absl::SkipEmpty());
/*
New Dir 2000
D:\computecpp-sdk\.git\refs\
*/
std::pair<std::string, std::string> count = absl::StrSplit(splitted[0], " ", absl::SkipEmpty());
/*
New Dir
2000
*/