紫猫插件-文件读写(1-13)

QM[zm]05.01 文件读写之读取乱码文件(VIP)

小知识:了解下base64编码(功能就目前而言只是让内容无法直接读取 还有一个常用用处是可以把图片的二进制流base64编码 把图片作为字符串来传输 实际上稍微懂一点这方面的知识的很容易看到真实的内容)

举个例子 比如迅雷下载地址

我们把第一行的字符串进行base64解码 得到的结果是

很明显 迅雷对下载地址进行了保护 算法无非就是 给真正的下载地址左侧加AA右侧加ZZ 然后整体bse64加密 得到了我们看到的迅雷下载地址

顺便说一下 我们平时在网页上增加图片链接 一般是这样<img src=“http://www.letuknowit.com/images/wg.png”/>  这样的话 每次打开这个网页 网页还要分出资源加载各种图片  如果我们把图片的二进制流直接base64处理 就相当于 我们把这个图像直接放到了网页上 图片本体就是在网页上 根本不需要加载  例如这样

这种图片格式 网页是支持的 所以不用担心

顺便附上 base64图片转化地址  自己测试就好http://imgbase64.duoshitong.com/

base64的详细资料 https://blog.csdn.net/goodlixueyong/article/details/52132250

base64在图片领域的使用 https://www.aimks.com/css-path-data-image-png-usage-base64.html

小知识:这节课主要是简单介绍了下 中文乱码出现原因

电脑上的txt默认编码为ansi 但是呢 手机上的txt默认编码为utf8  ansi包含的是英文符号和基础字符 但是不包含中文

解决办法:用紫猫插件的文件读写函数 编码参数为电脑就可以 但是注意 当前txt的编码格式必须为ansi 编码参数才能用 电脑 值 还有另外一个办法 把txt的编码格式转化为utf8保存下 就什么屁事也没有了

小知识:zm.readfile()函数

用法和默认的readfile基本一样 只是多了一个参数  zm.readfile(path,”电脑”) 第二个参数为电脑 则它认为txt是ansi编码  注意 当前txt的编码格式必须为ansi 编码参数才能用 电脑

源码:结果:

QM[zm]05.02 文件读写之解决开头问号字符(VIP)

小知识:为什么txt第一位有的时候出现一个问号 其实就是普通的txt文件会自带一个bom头 但是到了手机下 手机无法识别这个bom头 只能呈现一个问号

解决办法:

1.我原来的处理办法如下  核心思路无非就是把bom头的3个字符替换为空就解决了 bom头的3个字符就是Chr(239) & Chr(187) & Chr(191),  老师是视频里面的代码也是这样

Function 文本文件格式化操作(文件路径)
    Dim 读取内容
    读取内容 = Trim(file.Read(文件路径))
    //判断开头3个字符是否是bom头
    If Mid(读取内容, 1, 3) = Chr(239) & Chr(187) & Chr(191) Then
        //有则替换为空 然后重新写入内容 这个地方不确定是否除了第一行之外还可能存在bom头 应该没那么巧
        file.Write 文件路径, Replace(读取内容, Chr(239) & Chr(187) & Chr(191), "")
    End If
    //如果txt里面最后不是以\r\n结尾的 就自动添加一个回车换行符 来实现这个 也解决了替换最后一行 不写\r\n会替换找不到的情况
    If trim(读取内容)<>""and Right(读取内容, 2) <> "\r\n" Then
        file.Write 文件路径, 读取内容 & "\r\n"
    End If
End Function

2.直接用老师的紫猫插件的文件读取的函数 就可以自动过滤掉这些东西(推荐)

QM[zm]05.03 文件读写之读取帐号密码(VIP)

主要是讲解zm.FileReadForm( 用法 这个比较省事 可以直接把账号密码的若干信息直接分割好  不需要我们分割2次

源码如下

Import "zm.luae"
zm.Init 

Dim 账号文件路径="/sdcard/Pictures/账号.txt"
Dim 读取结果表=zm.FileReadForm(账号文件路径,"---","电脑")
TracePrint zm.VarInfo(读取结果表)
//遍历这个表
For i = 0 To UBOUND(读取结果表)
    TracePrint "账号:["&读取结果表(i,0)&"],密码:["&读取结果表(i,1)&"],状态{"&读取结果表(i,2)&"}"
    //TracePrint zm.VarInfo(读取结果表[i])
    //TracePrint 读取结果表[i][0]
Next

结果

原始的文件内容

注意

1.按键里面table二维表的调用自身的元素是这样的形势 tablename(0,1) 而不是tablename[0][1] 推荐以后都用这个 能节约3行代码 而且自带去掉bom头 自适应编码等优点

2.表的数字索引从0开始

QM[zm]05.04 文件读写之读取表格文本(VIP)

没有什么特殊的 还是继续讲解的zm.FileReadForm

zm.FileInit()----》参数是个表

zm.FileInit {"encode":"电脑"}

QM[zm]05.05 文件读写之按行读取(VIP)(好无聊 直接看文档即可)

zm.FileReadLines(path,“电脑”)用法基本和官方一致 无话可说

结果 = zm.FileReadLine(文本路径, 指定行[, 文件编码])  (平时不大用)

命令参数:
文件路径: 字符串, 要操作的文件路径
指定行: 数值型, 表示读取第几行内容, 负数为倒数第几行内容  有点意思
文件编码: 字符串, 可选, 填写"电脑"可以解决电脑文件乱码问题, 也可以填写`"auto"`实现自动识别文件编码, 但是会降低读写速度, 省略默认为初始化编码

小知识:将任意文件转化为字符串和将字符串还原为文件

(主要是图片文件 但是其他文件也是可以)

基本原理就是把文件以二进制形式读取出来 然后base64编码 等到一个字符串  还原为文件不过是相反的路子  这个很有用 很多文件这样的话都可以直接存储到数据库

注意:这样把文件转化为字符串并没有减少占用体积 反而是增加了占用体积  如果你的数据库的存储容量有限 就没有必要把这些文件都转化为字符串存储到数据库内

源码:

Import "zm.luae"
zm.Init
Dim 账号文件路径="/sdcard/Pictures/账号.txt"
//图片和base64编码之间的相互转换
Dim 图片文件路径="/sdcard/Pictures/1.docx"
dim b64 = zm.FileReadBinaryBase64(图片文件路径)
TracePrint b64
zm.FileWriteBinaryBase64("/sdcard/Pictures/2.docx", b64)

结果:

QM[zm]05.06 文件读写之初始化文件编码(VIP)

因为涉及到txt的编码问题 建议文件的读写全用紫猫的插件

原因:比如写入 zm.FileWrite 可以设置 写入txt里面的内容 编码是什么 而官方的命令无法设置 如果混在一起使用 可能会出现一些问题 所以建议全用紫猫的

建议在模板里面加入这个格式配

//固定的写法
Import "zm.luae"
zm.Init
zm.FileInit {"encode":"电脑"}//这个默认编码是对所有的紫猫插件的文件读写函数都有效 所以固定的要加上
//后面就是各种文件操作了

小知识:关于zm.FileInit{}的使用

如果不是显示定义该函数 那么默认就是 zm.FileInit{“encode”:”utf-8”}  如果txt文件是ansi编码 那么就需要设置为zm.FileInit{“encode”:”电脑”}   而且这个文件读写的初始化会影响到每个紫猫文件读写函数 切记切记

小知识:zm.FileWrite()的使用  另外一个就是普通的覆盖写入 没什么说的

有两种使用方法 一个是参数为表 覆盖写入txt后 表的每个元素都是一行

zm.FileWrite 账号文件路径,{"欢迎加入紫猫学院,", "紫猫老师QQ: 345911220 ", "免费交流群: 7333555"}

注意该函数和

FileInit()初始化函数的设置 是相关的 如果初始化编码为utf8  那么filewrite写入表元素 之间是以 \n 分隔  如果初始化函数设置编码为电脑 则filewrite写入表元素之间是以\r\n 分隔  这个十分要紧千万注意

QM[zm]05.08 文件读写之追加写入文件(VIP)

zm.FileWriteAppend(文件路径, ...)  还是和FIleInit()设置的编码相关 所以不用怎么说了

zm.FileWriteAppend 账号文件路径,{"欢迎加入紫猫学院,", "紫猫老师QQ: 345911220 ", "免费交流群: 7333555"}

QM[zm]05.09 文件读写之插入指定行文本(VIP)

跳过了

QM[zm]05.10 文件读写之替换指定行文本(VIP)

跳过了

QM[zm]05.11 文件读写之读写二进制流文本(VIP)

小知识:二进制流读取写入的作用

可以把文件转化为二进制字符串 也可以把二进制流字符串还原回文件   比如文件上传 文件移动等等 都可以用这个办法实现  但是 转化为二进制流后 里面存在大量不能视的符号  传输起来有的时候会 网络上有的时候无法传递一些字符 我们要保证这些二进制流字符串的稳定传递 那么需要用base64编码 传递这个所有字符都是可视的base64编码后的字符

//固定的写法
Import "zm.luae"
zm.Init
zm.FileInit {"encode":"电脑"}//这个默认编码是对所有的紫猫插件的文件读写函数都有效 所以固定的要加上
//后面就是各种文件操作了
Dim 账号文件路径="/sdcard/Pictures/账号.txt"
TracePrint zm.FileReadBinary(账号文件路径)

结果

看结果得到的二进制流字符串 有很多问号表示目前无法识别的字符 在传输期间可能会发生奇怪的无法识别更是存在可能 所以我们要用base64顺便编码下二进制流字符串

如上图 这样字符串就是全部都是英文字符和数字还有一些常见符号

是千万注意 base64编码后 这字符串只会比原来更大更多 这个要小心 这就要考虑网站本身的post传输的下载上传的极限 有的时候文件过大 导致服务器消耗大量资源来传输 也可以调整网站的配置来调整  可以参考这个 https://blog.csdn.net/u013239233/article/details/78040794 来调整网站设置  同时字段类型设置为longtext

这个思路也是很多网站上传图片的思路 把该图片转化为二进制流 字符串 把字符串上传即可 而不是ftp把该文件本身上传

QM[zm]05.12 文件读写之读写Base64二进制流文本(VIP)

没什么说的 以前都说完了  无非是搭配 网络数据共享 把baase64编码的字符串 上传到数据库 然后从数据库里面读取图片的base64字符串 还原图片

源码:

Import "zm.luae"
zm.Init
zm.FileInit {"encode":"电脑"}//这个默认编码是对所有的紫猫插件的文件读写函数都有效 所以固定的要加上
Dim 网络数据库接口地址="http://192.168.0.102/sql.php"
zm.NetDataInit 网络数据库接口地址, "上传图片"

//开始
Dim 原始图片文件路径="/sdcard/Pictures/1.png"
Dim 新图片文件路径="/sdcard/Pictures/4.png"
dim 原始图片base64后字符串= zm.FileReadBinaryBase64(原始图片文件路径)
Dim 当前数据库key=CStr(DateTime.Format("%Y_%m_%d_%H_%M_%S", Time()))
zm.NetDataSet 当前数据库key, 原始图片base64后字符串 //把图片的base64字符串上传到服务器
zm.FileWriteBinaryBase64(新图片文件路径,zm.NetDataGet(当前数据库key)) //从服务器上把base64字符串下载下来 还原为一个图片

QM[zm]05.13 文件读写之网络数据传输图片等文件(VIP)

用途

1.远程截图 运行脚本 脚本把截图上传服务器 我们从服务器那里还原截图

自行开发  自己想

2.如果文件过大 我们可以用紫猫的split来把文件分割为几个 然后依次上传 key设置后面接一连串的数值

实际测试我发现 如果

目标文件是个4m的 那么我base64编码需要快40秒 这个效率没什么意思 了解下写法即可

//固定的写法
Import "zm.luae"
zm.Init
zm.FileInit {"encode":"电脑"}//这个默认编码是对所有的紫猫插件的文件读写函数都有效 所以固定的要加上
Dim 网络数据库接口地址="http://192.168.0.102/sql.php"
zm.NetDataInit 网络数据库接口地址, "上传mqb"

//开始
Dim 原始文件路径="/sdcard/Pictures/1.gif"
Dim 新文件路径="/sdcard/Pictures/4.gif"
dim 原始文件base64后字符串= zm.FileReadBinaryBase64(原始文件路径)
TracePrint len(原始文件base64后字符串)
//开始把这个4m文件分割为几块
dim 分割后的表 = zm.Split(原始文件base64后字符串, 100000)

//开始上传
For i = 0 To UBOUND(分割后的表)
    zm.NetDataSet "gif文件"&cstr(i),分割后的表(i)

Next

//从数据库里面下载需要的key对应的内容 以mqb开始 0,1,2,3 如果遇到一个为空的表示 后面没有了
dim 汇总的数据 = ""
Dim 临时数据1=""
dim i=0
Do
    临时数据1 = ""
    临时数据1=zm.NetDataGet("gif文件"&cstr(i))
    If IsNull(临时数据1) Then
        Exit Do  //如果后面的key为空表示到头了
    Else
        汇总的数据=汇总的数据&临时数据1
    End If
    i = i + 1
    TracePrint i
Loop

TracePrint 汇总的数据
//把汇总的数据还原为文件
zm.FileWriteBinaryBase64(新文件路径,汇总的数据)

3.base64初始化的用法 默认用最普通的第一个

结果 = zm.InitBase64([字符表[, 填充符]])

简单的介绍下base64的3个不同模式

1.普通模式 不说了

2.安全模式 把普通模式的+ /转化为%XX  这个模式方便用于url传输 因为+/=之类的在url地址里有自己特殊的意义 所以必须转义

3.这种似乎用不上 不研究了 需要再百度

e123

原文地址:https://www.cnblogs.com/zjl8455482/p/10230993.html

时间: 2024-08-01 10:26:51

紫猫插件-文件读写(1-13)的相关文章

简易中控紫猫插件版(3)压缩包使用说明

1.环境配置 脚本运行环境:没什么说的 正常的最新版手机按键 当然还需要 最新的紫猫插件 中控运行环境:首先要保证把压缩包的所有php文件都扔到网站的根目录下 必须保证网站的php版本是5.4+ 不然紫猫插件的php框架会出问题 然后你要知道网站数据库的账号和密码,和要用到的数据库名(自己随便起名 比如test之类的),在网站根目录下找到dbcon.php文件 用写字板就可以打开 第一行基本不用动 第二行是数据库的账号 第三行是数据库密码 第四行是数据库名  把你刚刚知道的数据库信息写入里面 如

简易中控紫猫插件版(1)

中控思路基本都是从紫猫老师的教程里面获取到的 脚本代码大部分也是紫猫的  紫猫老师也提供了一个控制后台 不过是在脚本端的  而且暂时只能查看 无法直接修改 索性我就用php写了3个简单网页来作为控制后台 中控的核心思路:实现脚本和中控定期的交互 把脚本的信息上传给中控 中控把对应的内容反馈给脚本 然后脚本根据这些反馈做出对应的操作.紫猫插件的作用是 让我们无需深入研究网页编程就可以实现脚本和中控的交互 至于其他的东西还是需要我们自己来写 当前中控实现的功能 1.用户可以通过脚本注册账号 并可以修

简易中控紫猫插件版(2)基本思路介绍

整体的运行思路: 中控端:其实就是紫猫插件自带的那个sql.php 和对应的mysql数据库表 功能是和脚本主代码进行交互  目前这情况下是接收脚本主代码传递过来的信息(云账号和当前脚本状态) 并把脚本状态存储到中控对应的云日志表里,根据云账号去云用户表里面查询出对应的密码 再根据云账号去云配置表里面查询出对应的配置内容 然后把 对应的密码和对应的配置返回给脚本主代码 脚本主代码:只是负责和中控交互和根据中控指令开关脚本多线程 把从脚本多线程获取的脚本状态和云账号发送给中控端,中控处理完毕后返回

紫猫插件-网络共享数据(16-18)

QM[zm]04.16 网络共享数据之数据库权限(VIP) 小知识:简单的限制同名设备登陆功能 实现思路 每次某个设备登陆 就把登陆设备的设备Id上传接口 接口在数据库里面查找对应的设备 找到字段是否已运行为1  当该设备脚本停止 就给接口传送一个信息 让该字段为-1 但是这会涉及到接口的功能设计和php代码的管理  如果有相同设备id的设备想要运行脚本 先到接口的数据库搜索是否已运行字段的值  如果为1 表明已经有该设备运行 自然会阻止重名设备运转 如果没有设备运行 则允许运行后  把字段 已

[lua]紫猫lua教程-命令宝典-L1-01-01. Lua环境与IDE

网上大把的lua教程  不过紫猫老师的教程向来都是讲的非常仔细 所以最近天气已经36+了 魔兽世界还需要冲飞行声望  懒得写单子根本没有单子,正好认认真真的看下紫猫老师的lua教程 紫猫老师的lua教程的目的性相当明确就是让人能够独立的编写按键的lua插件  并且公布了紫猫插件的以前版本的源码  这一点对于我而言都是一个惊喜  可从紫猫老师的源码里面学到很多东西 顺路帮紫猫老师打个广告  不过紫猫老师的教程过于细致 什么都讲到了 视频量一直都很大  入学咨询QQ:345911220 紫猫学院官网

JS封装插件:实现文件读写功能

scripting.FileSystemObject是一个可以实现文件读写的COM组件,由于COM组件可以被跨语言调用,因此可以选择像vbs或者JS这种脚本语言调用,下面我就使用该COM组件封装了一个简单的JS插件,实现了文件的读写功能.(只能IE打开) JS代码(插件): (function(win,undefined){ var fso = new ActiveXObject("Scripting.FileSystemObject"); var file=null; var Fil

13、文件读写操作

由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用.所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try ... finally来实现: try: f = open('/path/to/file', 'r') print(f.read()) finally: if f: f.close() 但是每次都这么写实在太繁琐,所以,Python引入了with语句来自动帮我们调用close()方法: with open('/path/to/file', 'r

大数据【二】HDFS部署及文件读写(包含eclipse hadoop配置)

一 原理阐述 1' DFS 分布式文件系统(即DFS,Distributed File System),指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连.该系统架构于网络之上,势必会引入网络编程的复杂性,因此分布式文件系统比普通磁盘文件系统更为复杂. 2' HDFS 借此,关于GFS和HDFS的区别与联系查看 我于博客园找到的前辈的博客>>http://www.cnblogs.com/liango/p/7136448.html HDFS(Hadoop Dis

使用FileSystem类进行文件读写及查看文件信息

使用FileSystem类进行文件读写及查看文件信息 在这一节我们要深入了解Hadoop的FileSystem类--这是与与hadoop的文件系统交互的重要接口.虽然我们只是着重于HDFS的实现,但我们在编码时一般也要注意代码在FileSystem不同子类文件系统之间的可移植性.这是非常有用的,比如说你可以非常方便的直接用同样的代码在你的本地文件系统上进行测试. 使用hadoop URL读数据 从hadoop文件系统中读取文件的最简单的方法之一便是使用java.net.URL对象来打开一个欲从中