标题: [文件操作] [第三方]复制文件并显示系统进度条,支持不同源目录 [打印本页]
作者: 523066680 时间: 2015-11-26 22:52 标题: [第三方]复制文件并显示系统进度条,支持不同源目录
http://bcn.bathome.net/s/tool/index.html?key=copyw
编译方法:
MinGW: g++ main.cpp -municode
MSVC : cl main.cpp /link shell32.lib
使用方法参见代码开头注释部分,支持从不同的目录复制文件到指定目录,支持Unicode字符
(在终端粘贴Unicode字符虽然看到是空白的,但是并没有丢失)
动机:有段时间帮别人复制电影,对方从N个不同目录选取,然后复制
不爽的地方就是频繁的复制粘贴,目录切换,如果不同时操作(卡卡卡),还要等待某部分复制完再继续
以及,我也写过一个Perl读取剪切板列表,直到遇到文件夹才开始复制的,进度条都是用字符串的…… 那感觉好累=_=- /*
- Code by: 523066680
- Date : 2015-11
- Compile:
- MinGW: g++ main.cpp -municode
- MSVC : cl main.cpp /link shell32.lib
- Usage:
- Example:
- main.exe D:\FA\* F:\Spare
- main.exe D:\FA\* D:\FB\name.iso F:\Spare
- main.exe "D:\FA\Pro・e.rar" "F:\Spare"
- Note:
- Last path is the destination
-
- Support: Copy from different folder, Unicode String
- */
-
- #include <cstdio>
- #include <cstdlib>
- #include <io.h>
- #include <windows.h>
-
-
- void ShellCopy( wchar_t *SRC, wchar_t *DST );
-
- void connect_wcs_array (
- wchar_t *buff,
- wchar_t *array[],
- int begin,
- int end
- );
-
- int wmain(int argc, wchar_t *argv[] )
- {
- if (argc < 3)
- {
- printf("Arguments not enough\n");
- return -1;
- }
-
- //argv[argc-1] - Destination
-
- int length = 0;
- for (int i = 1; i <= argc-2; i++)
- {
- length += wcslen( argv[i] ) + 1;
- }
- length++; // 0x00 0x00
-
- wchar_t *fwaits = (wchar_t *) malloc(
- length * sizeof(wchar_t) );
-
- connect_wcs_array( fwaits, argv, 1, argc-2 );
- ShellCopy( fwaits, argv[argc-1] );
- free(fwaits);
- return 0;
- }
-
- void ShellCopy( wchar_t *SRC, wchar_t *DST )
- {
- int sherr;
- SHFILEOPSTRUCTW op;
- ZeroMemory( &op, sizeof(op) );
- op.hwnd = NULL;
- op.wFunc = FO_COPY;
- op.pFrom = SRC;
- op.pTo = DST;
- op.fFlags= 0;
- sherr = SHFileOperationW( &op );
- printf("%x", sherr);
- }
-
- void connect_wcs_array (
- wchar_t *buff,
- wchar_t *array[],
- int begin,
- int end
- )
- {
- int i;
- wchar_t *pt = buff;
-
- for ( i = begin; i <= end; i++ )
- {
- wcsncpy( pt, array[i], wcslen(array[i]) + 1 );
- pt += wcslen(array[i]) + 1;
- }
- *(pt) = L'\0'; // append 0x00
- }
复制代码
作者: 523066680 时间: 2015-11-26 23:03
好像忘了free
作者: aa77dd@163.com 时间: 2015-11-26 23:04
经验里, WIN 系统总只能在同一目录内多选 再 复制到某地方, 因为硬盘的物理实现, 复制这种东东MS 也只能先拟个表单, 再逐个处理, 虽是批量处理了, 但并不能并行, 只是预列表单是, 有一种并行的感觉
作者: 523066680 时间: 2015-11-26 23:07
回复 3# aa77dd@163.com
还看硬盘的瓶颈,要是固态和高配置的传输路线,那自然是666 也不用考虑太多
作者: CrLf 时间: 2015-11-27 03:53
噗哈哈哈哈哈哈简直受不了,那谁又提 C艹 了
已更新到 Batch-CN,话说楼主就不能写个帮助信息
作者: 523066680 时间: 2015-11-27 10:04
回复 5# CrLf
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |