这个工具利用 .NET 库提供的 FileSystemWatcher 类 (System.IO) 监听微信的接收文件目录,如果有新产生的只读文件,则去掉其只读属性。
Deprecated 不赞成下载成品
微信 3.9.6 添加了一个「以只读的方式打开聊天中的文件」选项(设置→文件管理→文件设置)来满足部分需要以可写方式打开聊天文件的需求。所以本示例代码开发出来工具已经不具实际使用的意义。但是作为示例代码,结合博客,仍然是个不错的学习案例。
需要工具可以直接去下载页:WxFilesWritable Ver 1.0.5
Windows 版微信升级到 3.9 之后,接收到的文件都变成了只读属性,对需要经常修改微信接收文件进行交流的人来说极为不变。虽然从业务功能上来说,需要频繁交流的文档还是用在线协同(比如腾讯文档)比较好一些,但从技术的角度来看,应该如何解决这个问题呢?
其实很多技术栈都提供了监听系统文件变化的 API,比如 .NET 就在其 System.IO
命名空间下提供了 FileSystemWatcher
类用于监听文件的变化,包括创建文件、删除文件、文件改名/移动、文件属性变化等。所以可以使用 C# 和 .NET 快速的写一个程序用来监听指定文件夹下的新建文件,如果新创建的文件属性是只读,则去掉其只读属性。
在微信的「设置→文件管理」中就可以找到,比如 C:\Users\James\Documents\WeChat Files
。然后需要识别这个目录下的用户目录,一般是微信号。点击微信窗口上自己的头像就可以看到。用户目录下的 FileStorage\File
目录就是我们的目标目录了。
为了帮助用户快速定位到这个目录,在假设用户没有手工改变微信文件目录的情况下,可以这样来查找
Environment.GetFolderPath()
获取到当前用户的“文档”目录;WeChat Files
目录的路径;WeChat Files
目录下的子目录,去掉特殊命名的 All Users
和 Applet
等,在剩下的子目录中进一步猜测当然,猜测的目录不一定准确,所以写程序的时候最好能提供给用户一个可以手工修改/设置目录的手段,当然别忘了目录的有效性检查(检查目录存在)。
监听文件变化只需要新建一个 FileSystemWatcher
对象,设置一些属性即可。
Path
到要监听的目录.IncludeSubdirectories = true
表示需要监听其子目录Created
事件在监听到有文件创建时进行处理如果目录下有新创建的文件,上面 Created
事件的 e
参数(FileSystemEventArgs
类型)会携带文件的信息,通过 e.FullPath
可以拿文件的完整路径。然后使用 FileInfo
判断其是否只读,并解除其只读属性即可。
实际使用中发现,只有在发送文件的时候,会在微信文件目录创建只读文件。接收文件的时候多数是收到的非只读文件,然后再改成只读属性的。所以还需要监听文件属性的变化。
这样就需要设置 FileSystemWatcher
对象的 NotifyFilter
属性,把 NotifyFilters.Attributes
标记加上。NotifyFilter
的默认值是 LastWrite
、FileName
和 DirectoryName
,
麻雀虽小,但也应该是五脏俱全。核心功能完成之后就需要考虑用户操作界面和使用体验上的一些问题。不用考虑得太复杂,但至少也应该考虑:
git clone -b WxFilesWritable https://gitee.com/jamesfancy/code-for-articles.git
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。