查看: 3021|回复: 66

[已经解决] 怎么调用win32API复制整个文件夹?

[复制链接]
梦石
0
星屑
1422
在线时间
137 小时
注册时间
2018-5-28
回帖
42
发表于 2020-4-20 20:20:17 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
目前我已经掌握了调用CopyFileA来复制单个文件,那如果我要复制整个文件夹,我应该怎么调用win32API?
梦石
0
星屑
13562
在线时间
2753 小时
注册时间
2014-10-4
回帖
705

R考场第七期纪念奖

发表于 2020-4-20 21:10:36 | 显示全部楼层
本帖最后由 SixRC 于 2020-4-21 22:36 编辑

1. 调用 shell
默认RMXP环境
[pre lang="ruby"]# system 三种调用方式
# 返回值是 true false nil 具体看ruby文档

# 第一种直接 system(命令)
system("xcopy /e f1 f2\\")

# 第二种 system(命令, 参数...)
system("xcopy", "/e", "f1", "f3\\")

# 第三种 system([命令,argv0], 参数...)
# argv0 是传入给目标程序的 也就是接收到的第一个命令行参数
# 假如你写过 c 就知道 argv0 是什么意思
system(["xcopy", ""], "/e", "f1", "f4\\")

# 上面的 system 可以换成 exec 但是执行完之后ruby会退出

# 下面的方法在 rmxp 里会炸 因为rm的ruby没有控制台

=begin
1. 用 ` ` 把命令包起来 返回值是命令的输出
`xcopy /e f1 f22\\`
p `date /t`

2. 用 %x 分隔符 分隔符 把命令包起来 同 ``
%x|xcopy /e f1 f22\\|
%x{xcopy /e f1 f22\\}

3. IO.popen
io = IO.popen("date /t")
io = IO.popen(["date", "/t"])
io = IO.popen([["date", ""], "/t"])
p io.gets

别的还有 spawn 等  在高版本ruby
看看文档就知道了
https://ruby-doc.org/core-2.7.1/
=end[/pre]

2. 递归处理文件夹 ruby递归有现成方法 api递归麻烦
3. 用 SHFileOperationA/W

评分

参与人数 1星屑 +50 收起 理由
RyanBern + 50 认可答案

查看全部评分

回复

使用道具 举报

梦石
10
星屑
39550
在线时间
1919 小时
注册时间
2010-11-14
回帖
3214

R考场第七期纪念奖

发表于 2020-4-20 21:29:54 | 显示全部楼层
[pre lang="ruby"]system('xcopy /e Folder1 Folder2\ ')[/pre]
用头画头像,用脚写脚本
回复

使用道具 举报

梦石
0
星屑
1422
在线时间
137 小时
注册时间
2018-5-28
回帖
42
 楼主| 发表于 2020-4-21 11:34:30 | 显示全部楼层
SixRC 发表于 2020-4-20 21:10
1. 调用 shell 一行完事
2. 递归处理文件夹 ruby递归有现成方法 api递归麻烦
3. 用 SHFileOperationA/W

看不懂啊,能否给个具体的脚本例子呢?

点评

我知道了  发表于 2020-4-23 13:25
嗯 遇事多思考 不要急着问别人 很多问题静下心想想就能解决的 别人的话也要看仔细 不然交流体验很差  发表于 2020-4-23 13:14
好吧,如果这么麻烦以我的能力也做不到,除此之外我没有其他问题了,感谢你长久以来的指导,谢谢  发表于 2020-4-23 13:05
能 但是代价太高 太麻烦了  发表于 2020-4-23 13:01
刚刚我又去试了下,好像所有的正常方法都无法做到  发表于 2020-4-23 12:58
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部