Foxtable(狐表)用户栏目项目发布 → [原创]通用代码之全自动备份


  共有6898人关注过本帖树形打印复制链接

主题:[原创]通用代码之全自动备份

帅哥哟,离线,有人找我吗?
lxy060669
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:168 积分:2609 威望:0 精华:0 注册:2012/10/16 22:38:00
[原创]通用代码之全自动备份  发帖心情 Post By:2018/5/27 11:31:00 [只看该作者]

       在此分享一段通用代码。主要功能是通过压缩,实现系统全自动备份。在项目事件BeforeCloseProject中引用。备份的内容包括项目下的所有文件包括子文件夹下的内容,且按原路径备份。zip文件优先存盘在D:,只有C盘的,则存在我的文档下。
  话不多说,贴出代码:
'------自动备份,存在D驱,则存在D盘,否则存在我的文档下.
Dim zip As New zipFile
Dim idx As Integer = ProjectFile.LastIndexOf(".")
Dim idx1 As Integer = ProjectFile.LastIndexOf("\")
Dim proname As String  = ProjectFile.SubString(idx1+1,idx-idx1-1) & "bak"
Dim bakfolder As String
If FileSys.DirectoryExists("D:\") Then '如果目录C:\MyFolder存在
    bakfolder="d:\ftaxbak\" & proname & "\"
Else
    bakfolder=SpecialFolder.MyDocuments & "\ftaxbak\" & proname & "\"
End If

If FileSys.DirectoryExists(bakfolder)=False Then '如果备份目录存在
    FileSys.CreateDirectory(bakfolder) '创建备份目录
End If
zip.Create( bakfolder & proname & Format(now(),"yyyyMMddHHmm") & ".zip")
zip.AddFile(ProjectFile)
'--添加压缩项目路径下文件
For Each File As String In FileSys.GetFiles(ProjectPath )
    zip.AddFile(File,FileSys.GetName(File))
Next
'--添加压缩子文件夹下文件
For Each wjj As String In FileSys.GetDirectories(ProjectPath)
    Functions.Execute("zipinputfile",zip,wjj)
    '递归函数的代码
    'Dim zip As zipFile = args(0)
    'Dim wjj As String =args(1)
    'For Each wjpath As String In FileSys.GetFiles(wjj)
    ''Output.Show( wjj.Replace(ProjectPath,"") & "\" & FileSys.GetName(wjpath))
    'zip.AddFile(wjpath, wjj.Replace(ProjectPath,"") & "\" & FileSys.GetName(wjpath))
    'Next
    'For Each zwjj As String In FileSys.GetDirectories(wjj)
    'Functions.Execute("zipinputfile",zip,zwjj)
    'Next
    
Next
zip.Close()
'在程序项目退出事件中
For Each dt As DataTable In DataTables
    If dt.HasChanges Then
        dt.Save()
    End If
Next

     再给你个小技巧,将这段代码写入“代码库”中,以后每写一个新程序,只需从这里添加即可。 

[此贴子已经被作者于2018/5/27 11:35:41编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
lxy060669
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:168 积分:2609 威望:0 精华:0 注册:2012/10/16 22:38:00
  发帖心情 Post By:2018/5/27 11:32:00 [只看该作者]

这里上篇引用的递归函数的代码,由于一个帖子的内容超出16000字符就写不进去。所以放在这里。
'递归函数,取名zipinputfile,拷入自定义函数,去掉注释。
'Dim zip As zipFile = args(0)
'Dim wjj As String =args(1)
'For Each wjpath As String In FileSys.GetFiles(wjj)
'zip.AddFile(wjpath, wjj.Replace(ProjectPath,"") & "\" & FileSys.GetName(wjpath))
'Next
'For Each zwjj As String In FileSys.GetDirectories(wjj)
'Functions.Execute("zipinputfile",zip,zwjj)
'Next 
Next
zip.Close()

 回到顶部
帅哥哟,离线,有人找我吗?
thz706
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:261 积分:2041 威望:0 精华:0 注册:2017/11/21 15:01:00
  发帖心情 Post By:2018/8/10 13:46:00 [只看该作者]

测试了   没成功  不知道哪出问题了

 回到顶部
帅哥哟,离线,有人找我吗?
旭日生
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:340 积分:3375 威望:0 精华:0 注册:2011/3/22 22:52:00
  发帖心情 Post By:2019/3/30 19:15:00 [只看该作者]

这段代码非常好,比较完美地解决了自动备份问题!谢谢lxy060669!
不过,由于Foxtable发布后可执行文件有一定的特殊性,保存Publish目录下,而且可以多份执行,这为录入不同单位归档目录带来了方便。为了区分不同单位的文件,我习惯于改名Publish目录(如Publish001/Publish002.....),但这带来了一个问题,不同目录下的文件全部保存在Foxbak目录下,容易混淆。如果能将备份文件带上目录就好了。如"归档文件目录著录系统bak201903280144_Publish001.zip"就更加完美了!

有大神能帮助解决吗?

 回到顶部