良庆网站建设,手机端网站开发价格,沈阳网站icp备案,云南app开发系统日期#xff1a;2023年3月10日 作者#xff1a;Commas 签名#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释#xff1a;如果您觉得有所帮助#xff0c;帮忙点个赞#xff0c;也可以关注我#xff0c;我们一起成长#xff1b;如果有不对的地方#xf… 日期2023年3月10日 作者Commas 签名(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释如果您觉得有所帮助帮忙点个赞也可以关注我我们一起成长如果有不对的地方还望各位大佬不吝赐教谢谢^ - ^ 1.01365 37.78340.99365 0.0255 1.02365 1377.40830.98365 0.0006 文章目录一、前言二、设置与取消文件只读权限三、判断文件只读四、实现过程一、前言
当一个文件Word、Excel、PPT等等编辑的差不多了准备保存的时候哟好家伙发现该文件权限设置为只读readonly了无法保存心情突然没那么美丽了。其实很简单解决这个问题如下所示 右键选择“属性”→取消“只读”的勾选那么example.docx文件就取消只读可以正常保存了。另外还有什么压缩传输法文件另存法微信降级法等等虽然可以解决问题但是也太不方便了。
后面排查发现原来是最近微信更新后出现的问题——微信传输的文件均被设置成了只读readonly权限给出的说法是为了防止文件信息在网络传输过程中被篡改。但是也太不方便了吧作为一名技术不能忍于是乎搞出一个小程序chmod.exe将这个exe放在微信下载文件夹下面运行就可以把整个文件夹中所有的文件取消只读了看下效果吧
双击运行效果如下再次双击运行效果如下
好了话不多说我们接下来讲讲如何实现吧……
最后面放了程序与源码的下载地址^ - ^
二、设置与取消文件只读权限
VB6中的VBA库提供了一个方法SetAttr()可以设置文件的读写等等权限。
语法
VBA.SetAttr(PathName As String,Attributes As VbFileAttribute)或
SetAttr(PathName As String,Attributes As VbFileAttribute)PathName必要参数。需要修改只读属性的文件路径或目录路径Attributes必要参数。常数或数值表达式其总和用来表示文件的属性
attributes 参数设置可为
常数值描述vbNormal0常规缺省值可读可写vbReadOnly1只读vbHidden2隐藏vbSystem4系统文件vbArchive32上次备份以后文件已经改变
设置只读示例
set the file readoly
Call VBA.SetAttr(App.Path \example.txt,vbReadOnly)或
set the file readoly
Call VBA.SetAttr(App.Path \example.txt,1)取消只读示例
cancel the file readonly
Call VBA.SetAttr(App.Path \example.txt, vbNormal)或
cancel the file readonly
Call VBA.SetAttr(App.Path \example.txt, 0)三、判断文件只读
VB6中的VBA库提供了一个方法GetAttr()可以设置文件的读写等等权限。
语法
VBA.GetAttr(PathName As String) As VbFileAttribute或
GetAttr(PathName As String) As VbFileAttributePathName必要参数。需要修改只读属性的文件路径或目录路径VbFileAttribute返回值是一个 十进制 的Integer此为一个文件、目录、或文件夹的属性值总和
由 GetAttr 返回的值是下面这些属性值的总和
常数值(十进制)值(二进制)描述vbNormal00常规vbReadOnly11只读vbHidden210隐藏vbSystem4100系统文件vbDirectory1610000目录或文件夹vbArchive3210000上次备份以后文件已经改变vbalias641000000指定的文件名是别名
特别说明
若要判断是否设置了某个属性在 GetAttr 函数与想要得知的属性值之间使用 And 运算符与逐位比较。如果所得的结果不为零则表示设置了这个属性值即
result GetAttr(PathName) And VbFileAttribute如果 result 0 那么表示设置 VbFileAttribute 权限如果 result 0 那么没有设置 VbFileAttribute 权限
只读示例
Dim result As Integer
result GetAttr(App.Path \example.txt, 0) And vbReadOnly
If result 0 ThenDebug.Print 文件设置了只读权限
ElseDebug.Print 文件未设置只读权限
End If只要result 0就表示文件设置了只读权限其中用到了一个【And 运算符与逐位比较 】知识点如果读者感兴趣那么到时候再出一期详细讲讲吧这里展开讲解的话可以话题就跑偏了。
上述判断文件权限大部分习惯高级语言的小伙伴们都不太适应吧所以我将其封装了下健康绿色可以放心食用如下所示
Private Function CheckFileReadOnly(ByVal sFilePath As String) As Boolean
On Error Resume Next
函数说明判断文件是否为只读
创建作者Commas
创建时间2022-02-16
修改时间
------数据格式说明------
sFilePath文件路径
------数据格式说明------CheckFileReadOnly FalseIf sFilePath ThenIf Dir(sFilePath, vbDirectory vbNormal vbArchive vbHidden vbReadOnly vbSystem) ThenIf (VBA.GetAttr(sFilePath) And vbReadOnly) 0 ThenCheckFileReadOnly TrueEnd IfEnd IfEnd If
End Function四、实现过程
现在我们实现的是一个文件的权限设置如果就这么去取消只读权限那还不如直接右键属性直接取消来的快所以需要用到目录遍历如果想详细了解这方面的知识可以看我的另一篇博文《VB6遍历目录文件夹和文件》。
首先我们封装一下单个文件的取消只读权限
Private Function CancelFileReadOnly(ByVal sFilePath As String) As Boolean
On Error Resume Next
函数说明文件取消只读
创建作者Commas
创建时间2022-02-16
修改时间
------数据格式说明------
sFilePath文件路径
------数据格式说明------Err.ClearVBA.SetAttr sFilePath, vbNormalIf Err 0 ThenCancelFileReadOnly FalseErr.ClearElseCancelFileReadOnly TrueEnd If
End Function然后我们获取路径下的所有目录文件夹目录文件目录
Set clnDir GetAllDir(sFindPathName)接着我们遍历目录clnDir来取消文件只读
For i 1 To clnDir.CountsCurFilePath clnDir.Item(i)判断文件是否未只读If CheckFileReadOnly(sCurFilePath) ThensCurFileName Mid(sCurFilePath, InStrRev(sCurFilePath, \) 1)取消文件只读权限If CancelFileReadOnly(sCurFilePath) ThenclnOK.Add sCurFileNameElseclnFail.Add sCurFileNameEnd IfEnd If
Next i最后将遍历过程封装成函数即批量取消只读权限BatchCancelFileReadOnly
Private Function BatchCancelFileReadOnly(ByVal sFindPathName As String) As Boolean
On Error Resume Next
函数说明文件取消只读
创建作者Commas
创建时间2022-02-16
修改时间
------数据格式说明------
sFindPathName文件夹路径
------数据格式说明------Dim sCurFileName As String, sCurFilePath As String, i As LongDim clnOK As New Collection, clnFail As New Collection, clnDir As New Collection 获取查询路径下所有目录包括子孙Set clnDir GetAllDir(sFindPathName)For i 1 To clnDir.CountsCurFilePath clnDir.Item(i)判断文件是否未只读If CheckFileReadOnly(sCurFilePath) ThensCurFileName Mid(sCurFilePath, InStrRev(sCurFilePath, \) 1)取消文件只读权限If CancelFileReadOnly(sCurFilePath) ThenclnOK.Add sCurFileNameElseclnFail.Add sCurFileNameEnd IfEnd IfNext iIf clnFail.Count 0 ThenBatchCancelFileReadOnly TrueElseBatchCancelFileReadOnly FalseEnd IfDim sMsg As StringIf clnOK.Count 0 Or clnFail.Count 0 ThenaddMsg sMsg, ******操作完成详情如下******addMsg sMsg, 执行路径 sFindPathNameaddMsg sMsg, End IfokIf clnOK.Count 0 ThenaddMsg sMsg, addMsg sMsg, 已取消【只读】的文件如下所示End IfFor i 1 To clnOK.CountaddMsg sMsg, clnOK(i)NextfailIf clnFail.Count 0 ThenaddMsg sMsg, addMsg sMsg, 取消【只读】失败的文件如下所示End IfFor i 1 To clnFail.CountaddMsg sMsg, clnFail(i)NextIf sMsg Then sMsg 经检查【路径 sFindPathName 】没有【只读】文件MsgBox sMsg
End Function调用示例
Sub Main()Dim sPath As StringVBA.Command$ 也可以从命令行参数提取path这里暂时没有实现sPath App.PathDebug.Print BatchCancelFileReadOnly(sPath)
End Sub顺便提一嘴还可以做一个计时器定时执行取消只读权限或者监听文件变化再执行批量取消这样看上去就会更加便捷了这个实现就留给聪明的你啦^ - ^ 一、下载地址
免费白嫖https://download.csdn.net/download/qq_35844043/87548631积分下载https://download.csdn.net/download/qq_35844043/87548735
二、源码分享
GitCode地址https://gitcode.net/qq_35844043/vb6/-/tree/master/ 版权声明本文为博主原创文章如需转载请给出 原文链接https://blog.csdn.net/qq_35844043/article/details/129420874