读写文件的全部数据
包:"io"
聚集了大量的和输入输出相关的操作,和文件有关系
WriteFile(“文件的路径”, 内容, 选项)
我们看下面这个例子
因为我们现在要写入文件,没有人规定这个文件只能装文本,它找我们要的是byte数组
执行成功
为什么我的权限是可以写的?我明明设置成只读的啊?
权限在window上是不起作用的,在linux上起作用的
现在咱们能写入文件了,接下来我们进行读文件
ioutil.WriteFile(路径, 内容, 权限)
ioutil.ReadFile(路径) ---返回值:data和error
data是byte数组 error反映是否成功
输出的是dfadfasdf的每个字符对应的ascii值
不过我们想把它们变成字符串
nil代表的是没有错误
我们可以写的更完美一些:
读写文件的其中一部分
使用的包是“os"
所有的系统调用都和这个包有关系,可以用它来获取系统的信息,创建进程,创建文件的引用
打开文件
//默认是以读取方式打开
os.Open(文件路径)//返回值:f: err:
//读取、追加、写入、读写
os.OpenFile(文件路径, 标志, 权限)
f是文件句柄,就是资源标识符,是一个数字,以后对这个文件进行的所有操作都以这个数字作为依据,会去找这个数字对应的资源去操作。
//可以根据我们的需求读写东西
file.Read()//返回值:n:实际读到的字节数,err:读取操作是否成功
file.Write()//返回值: n:实际写入的字节数 err:写入操作是否成功
因为磁盘是按照簇来划分的,一个簇(就是一个小格子)的大小就是4096字节
一个簇是4096字节,如果我们的文件大小是5000字节,相当于把第一个簇占满了,第二个簇用了其中一部分,后面的空间空着,但是也只能空着,因为一个簇只能存放同一个文件的数据信息
为什么平时压缩文件可以大幅度降低空间大小?它就是把这些文件压实了,就没有簇的概念了,都挤着待着
我们现在设置:一次读取4096个字节:
读到了9个字节
我们把读到的东西打印出来:
后面全是0,因为文件就9个字节,后面的空间没有用上
我们转成字符串输出:
所有可用的文件标志
可以同时存在多个标志
代码示例:
为什么write执行后结果咋没有变化?
write也有返回值,和read一样,我们来看看是什么原因
因为访问被禁止了
因为open默认是以只读方式打开
只写标志的应用场景:操作日志,只往里写,日志里的内容不想读,普通程序只能写日志,不能读日志
正常情况,默认的写入文件是以覆盖的方式:
我们先看看1.txt的原有的内容:
然后把111写入这个文件
没问题,写入了3个东西
我们现在打开1.txt看看
写入文件,默认是指向首位置,覆盖的方式
如果我们加上这个标志位:
就是把文件指针移到了末尾位置,以追加的方式写入文件
我们现在再执行一下:
我们再次打开1.txt
现在我们已经有2.txt了。我们执行下面代码:
对写入有效,对读无效。
在写入的时候把原有的内容清空,然后再写。