以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助]如何利用递归函数对文件夹下所有文件加密 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=186624) |
-- 作者:洮沙 -- 发布时间:2023/5/16 11:23:00 -- [求助]如何利用递归函数对文件夹下所有文件加密 老师,如何实现对文件夹A(包含若干子文件夹及文件)中所有文件进行加密后创建同结构文件夹B,知道用递归函数,看了半天,无从下手。麻烦老师写一下代码,谢谢! |
-- 作者:有点蓝 -- 发布时间:2023/5/16 11:32:00 -- 假设函数名称:abc,函数内容 dim dir as string For Each fl As String In FileSys.GetFiles(dir) 对文件的处理 next For Each dir2 As String In FileSys.GetDirectories(dir) 如果有子目录 Functions.Execute("abc",dir2 ) Next 按钮 For Each dir2 As String In FileSys.GetDirectories("文件夹A的路径") Functions.Execute("abc",dir2 ) Next |
-- 作者:洮沙 -- 发布时间:2023/5/16 11:40:00 -- 感谢老师回复,再麻烦问一下如何将加密后文件创建同结构文件夹? |
-- 作者:有点蓝 -- 发布时间:2023/5/16 11:47:00 -- http://www.foxtable.com/webhelp/topics/0331.htm |
-- 作者:洮沙 -- 发布时间:2023/5/16 11:58:00 -- 老师,测试二楼代码,出现以下错误: .NET Framework 版本:4.0.30319.42000 Foxtable 版本:2022.8.18.1 错误所在事件:自定义函数,abc 详细错误信息: 调用的目标发生了异常。 值不能为 null。 参数名: path |
-- 作者:有点蓝 -- 发布时间:2023/5/16 13:28:00 -- dim dir as string 改为 dim dir as string = args(0)
|
-- 作者:洮沙 -- 发布时间:2023/5/16 14:33:00 -- 老师,参照您的解答,编写以下代码,以下红色部分没有执行,再次麻烦您修改以下,感谢! Public FLn As Integer = 0 Public FLold As String Public FLnew As String “文件加密”内部函数代码: Dim dir As String = args(0) For Each fl As String In FileSys.GetFiles(dir) EncryptFile(fl, fl.Replace(FLold, FLnew), "Qtkj") \'没有执行 FLn = FLn + 1 Next For Each dir2 As String In FileSys.GetDirectories(dir) \'如果有子目录 If FileSys.DirectoryExists(dir2.Replace(FLold, FLnew)) Then \'如果目录不存在 Else FileSys.CreateDirectory(dir2.Replace(FLold, FLnew)) \'没有执行 End If Functions.Execute("文件加密", dir2) Next 按钮代码: Dim dxg1 As WinForm.TextBox = e.Form.Controls("TextBox1") Dim dxg2 As WinForm.TextBox = e.Form.Controls("TextBox2") If dxg1.Text = Nothing Then MessageBox.Show("请先选择【源文件夹】!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning) dxg1.Select() \'焦点控件 Return End If If dxg2.Text = Nothing Then MessageBox.Show("请先选择【加密后文件夹】!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning) dxg2.Select() \'焦点控件 Return End If \'全局代码赋值 FLold = dxg1.Text FLnew = dxg2.Text \'执行文件加密递归函数 For Each dir2 As String In FileSys.GetDirectories(FLold) Functions.Execute("文件加密", dir2) Next MessageBox.Show("加密成功【" & FLn & "】个文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning) ’FLn计数为4不正确,应该是5 \'恢复全局代码初始值 FLold = "" FLnew = "" FLn = 0 \'打开加密后文件夹 Dim proc As New Process proc.File = dxg2.Text proc.Start 源文件夹结构为: [此贴子已经被作者于2023/5/16 14:42:12编辑过]
|
-- 作者:有点蓝 -- 发布时间:2023/5/16 14:39:00 -- 1、加密用EncryptFile:http://www.foxtable.com/webhelp/topics/1346.htm 2、目录必须先创建,才能往里存放文件
|
-- 作者:洮沙 -- 发布时间:2023/5/16 14:45:00 -- EncryptFile自己疏忽了,另外问一下老师,递归函数中怎么动态增加文件夹? |
-- 作者:有点蓝 -- 发布时间:2023/5/16 14:49:00 -- FileSys.CreateDirectory |