go语言文件系统
检测文件是否存在
//存在返回 true,不存在返回 false
func fileIfExist(filename string) bool {
_, err := os.Stat(filename)
if nil != err {
fmt.Println(filename, "is not exist!")
return false
}
if os.IsNotExist(err) {
return false
}
return true
}
打开文件
f, err := os.Open(filename)
if nil != err {
fmt.Println("open", filename, "failed!")
return
}
defer f.Close()
如果文件不存在,就会返回错误,如果存在就以只读的方式打开文件。
还可以使用 os.OpenFile()
打开文件,达到不存在就新建,存在就清空(os.O_TRUNC
)的目的。当然,也可以不清空文件(os.O_APPEND
)。
f, err := os.OpenFile(filename, os.O_RDWR | os.O_CREATE | os.O_TRUNC, 0666)
if nil != err {
fmt.Println("create", filename, "failed!")
return
}
defer f.Close()
新建文件
f, err := os.Create(filename)
if nil != err {
fmt.Println("create", filename, "failed!")
return
}
defer f.Close()
注意:如果文件已经存在,那么 os.Create()
会将文件清空。可以使用 os.OpenFile()
新建文件, 参数 flag
为 os.O_CREATE | os.O_EXCL
。如果文件已经存在,那么该函数就会返回错误。
f, err := os.OpenFile(filename, os.O_CREATE | os.O_EXCL, 0666)
if nil != err {
fmt.Println("create", filename, "failed!")
return
}
defer f.Close()
读取文件
读取全部内容
content := make([]byte, 1024) //需要预先分配空间
f, _ := os.Open(filename)
defer f.Close()
_, err := f.Read(content)
if nil != err {
fmt.Println("read", filename, "failed!")
return
}
读取文件内容可以使用 File
的方法——Read
。但是使用该方法时需要预先分配空间,用于存储读取的文件内容。我们当然可以提前获取文件的大小,但是这种方式仍然不如 ioutil.ReadAll()
方便。甚至可以直接使用 ioutil.ReadFile()
。
ioutil.ReadAll()
:
f, _ := os.Open(filename)
defer f.Close()
content, err := ioutil.ReadAll(f)
if nil != err {
fmt.Println("read", filename, "failed!")
return
}
fmt.Println(string(content))
ioutil.ReadFile()
:
content, err := ioutil.ReadFile(filename)
if nil != err {
fmt.Println("read", filename, "failed!")
return
}
fmt.Println(string(content))
按行读取
f, _ := os.Open(filename)
defer f.Close()
scanner := bufio.NewScanner(f) //按行读取
for scanner.Scan() {
fmt.Println(scanner.Text()) //输出文件内容
}
写入文件
f, _ := os.OpenFile(filename, os.O_WRONLY | os.O_APPEND, 0666)
defer f.Close()
_, err = f.WriteString("target_compile_option")
if nil != err {
fmt.Println(err)
}
这里使用 os.OpenFile()
以追加的方式打开文件。为什么不使用 os.Open()
打开文件呢?因为 os.Open()
是以只读的方式打开文件,无法向文件写入数据。
我们也可以使用 ioutil.WriteFile()
写文件。
writeContent := "write file test"
err = ioutil.WriteFile(filename, []byte(writeContent), os.ModePerm)
if nil != err {
fmt.Println("write", filename, "failed!")
}
注意:使用 ioutil.WriteFile(filename string, data []byte, perm os.FileMode)
向文件中写入时,如果文件存在,文件会先被清空,然后再写入。如果文件不存在,就会以 perm
权限先创建文件,然后再写入。
关闭文件
直接调用 File
的 Close()
方法。
f, _ := os.Open(filename)
f.Close()
最好使用 defer
关键字执行 Close()
方法,这样能够保证函数退出时文件能被关闭。
删除文件
err := os.Remove(filename)
删除文件前确保文件没有被其他程序使用。如果在当前程序中该文件已被打开,需要先关闭(Close()
)文件。
go语言文件系统的更多相关文章
- C++ ofstream和ifstream具体的方法和C语言file说明
ofstream是从内存到硬盘,ifstream是从硬盘到内存,事实上所谓的流缓冲就是内存空间; 在C++中,有一个stream这个类,全部的I/O都以这个"流"类为基础的,包含我 ...
- Linux下安装Redmine(项目管理软件)
前置条件需要安装 ruby,rubygems,rake,rails和mysql数据库. 安装Redmine 和 Ruby.Rails对应的版本: Redmine version Supported R ...
- golangHTML标签提取器soup
什么是soup 类似python中beatifulsoup,用于提取html标签提取,多用于爬虫.它可以很好的处理不规范标记并生成剖析树(parse tree). 它提供简单又常用的导航,搜索以及修改 ...
- 运用Python语言编写获取Linux基本系统信息(二):文件系统使用情况获取
本文跟着上一篇文章继续写,上一篇文章的链接 运用Python语言编写获取Linux基本系统信息(一):获得Linux版本.内核.当前时间 一.随便说说 获取文件系统使用情况的思路和上一篇获取主要系统是 ...
- C语言整理——文件系统和文件访问
标准C中规定了文件系统的访问和对文件本身的访问.不管是windows系统或者是泛unix系统,都实现了这些接口.在了解这些知识后,跨平台编程也将非常容易. 对文件系统的访问接口有: chdrive() ...
- 【操作系统】C语言编写的FAT16文件系统
[操作系统]C语言编写的FAT16文件系统 这是操作系统的期末课程设计作业之一,主要功能是在物理内存中虚拟出一个1M大小的FAT16的文件系统,然后把它读入内存中,进行具体的文件操作,具体的实用性不大 ...
- FastDFS是使用c语言编写的开源高性能分布式文件系统
FastDFS是什么 FastDFS是使用c语言编写的开源高性能分布式文件系统 是由淘宝开发平台部资深架构师余庆开发,FastDFS孵化平台板块 他对文件进行管理,功能包括文件存储,文件同步,文件访问 ...
- 【程序员技术练级】学习一门脚本语言 python(二)遍历本地文件系统
这篇将讲述怎么使用python来遍历本地文件系统,并把文件按文件大小从小到大排序的一个小例子 在这个例子中,主要会用到python内置的和OS模块的几个函数: os.walk() : 该方法用来遍历指 ...
- 操作系统: 二级文件夹文件系统的实现(c/c++语言)
操作系统的一个课程设计,实现一个二级文件夹文件系统. 用disk.txt模拟磁盘,使用Help查看支持的命令及其操作方式,root为超级用户(写在disk.txt中) 文件的逻辑结构:流式文件. 物理 ...
随机推荐
- CentOS7下OpenLDAP部署
OpenLDAP作为开源的LDAP服务,可用于搭建统一认证平台,在很多企业内部应用比较广泛,本文将介绍在CentOS7下OpenLDAP的部署. 环境: CentOS 7.4 OpenLDAP 2.4 ...
- xmind2020 zen 10.2.1win/mac/linux安装教程
xmind是一款优秀的思维导图软件,本文教大家如何安装xmind zen 2020 10.2.1版本,解锁使用全部功能,包括去掉xmind zen水印.上传图片等功能,支持windows/mac/li ...
- Chrome添加 测试设备 手机iPhone x系列手机
一.F12,点击下图中的Edit,添加设备 二.添加名为iPhone XR的设备,设备配置如下 三.其中User agent string如下 Mozilla/5.0 (iPhone; CPU iPh ...
- @ControllerAdvice全局异常处理不起作用原因及解决办法
这段时间使用springboot搭建基础框架,作为springboot新手,各种问题都有. 当把前端框架搭建进来时,针对所有controller层的请求,所发生的异常,需要有一个统一的异常处理,然后返 ...
- ifix 自动化(Automation)错误弹窗的解决方案
在先前ifix项目中添加了语音模块,然后概率性跳出自动化(Automation)错误弹窗,先前分析了很多种原因,从代码的冗余,编码等角度进行了优化,效果不是很理想,仍然会概率性出现.经过反反复复大约3 ...
- npm命令,nrm命令,n命令, nvm命令
npm命令 npm/yarn config set registry https://registry.npm.taobao.org 设置淘宝镜像npm/yarn config get registr ...
- JAVA,IDEA下的包机制
IDEA下的包机制 在实际开发中,大型系统往往需要多人合作完成,每个程序员都要命名多个类与接口等类型,难免会定义重复的类与接口.为了避免名字冲突,java提供了包机制只要包名不同,即使类名相同,也能相 ...
- i春秋“百度杯”CTF比赛 十月场-Vld(单引号逃逸+报错注入)
题目源代码给出了提示index.php.txt,打开拿到了一段看不太懂得东西. 图片标注的有flag1,flag2,flag3,同时还有三段字符,然后还出现了_GET,脑洞一一点想到访问 ?flag1 ...
- 学习vue过程中遇到的问题
1.vue-quill-editor动态禁用 项目中把vue-quill-editor单独封装成了一个组件,通过props传递readOnly参数来设置是否禁用editor.开发中发现可以实现禁用效果 ...
- pfx格式密钥库修改密码
1.pfx格式的密钥库不能直接用keytool修改私钥密码,需要先转成keystore keytool -importkeystore -srckeystore D:/ssl/test.pfx -sr ...