检测文件是否存在

//存在返回 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语言文件系统的更多相关文章

  1. C++ ofstream和ifstream具体的方法和C语言file说明

    ofstream是从内存到硬盘,ifstream是从硬盘到内存,事实上所谓的流缓冲就是内存空间; 在C++中,有一个stream这个类,全部的I/O都以这个"流"类为基础的,包含我 ...

  2. Linux下安装Redmine(项目管理软件)

    前置条件需要安装 ruby,rubygems,rake,rails和mysql数据库. 安装Redmine 和 Ruby.Rails对应的版本: Redmine version Supported R ...

  3. golangHTML标签提取器soup

    什么是soup 类似python中beatifulsoup,用于提取html标签提取,多用于爬虫.它可以很好的处理不规范标记并生成剖析树(parse tree). 它提供简单又常用的导航,搜索以及修改 ...

  4. 运用Python语言编写获取Linux基本系统信息(二):文件系统使用情况获取

    本文跟着上一篇文章继续写,上一篇文章的链接 运用Python语言编写获取Linux基本系统信息(一):获得Linux版本.内核.当前时间 一.随便说说 获取文件系统使用情况的思路和上一篇获取主要系统是 ...

  5. C语言整理——文件系统和文件访问

    标准C中规定了文件系统的访问和对文件本身的访问.不管是windows系统或者是泛unix系统,都实现了这些接口.在了解这些知识后,跨平台编程也将非常容易. 对文件系统的访问接口有: chdrive() ...

  6. 【操作系统】C语言编写的FAT16文件系统

    [操作系统]C语言编写的FAT16文件系统 这是操作系统的期末课程设计作业之一,主要功能是在物理内存中虚拟出一个1M大小的FAT16的文件系统,然后把它读入内存中,进行具体的文件操作,具体的实用性不大 ...

  7. FastDFS是使用c语言编写的开源高性能分布式文件系统

    FastDFS是什么 FastDFS是使用c语言编写的开源高性能分布式文件系统 是由淘宝开发平台部资深架构师余庆开发,FastDFS孵化平台板块 他对文件进行管理,功能包括文件存储,文件同步,文件访问 ...

  8. 【程序员技术练级】学习一门脚本语言 python(二)遍历本地文件系统

    这篇将讲述怎么使用python来遍历本地文件系统,并把文件按文件大小从小到大排序的一个小例子 在这个例子中,主要会用到python内置的和OS模块的几个函数: os.walk() : 该方法用来遍历指 ...

  9. 操作系统: 二级文件夹文件系统的实现(c/c++语言)

    操作系统的一个课程设计,实现一个二级文件夹文件系统. 用disk.txt模拟磁盘,使用Help查看支持的命令及其操作方式,root为超级用户(写在disk.txt中) 文件的逻辑结构:流式文件. 物理 ...

随机推荐

  1. C++第五十篇 -- 获取串口的描述信息

    如何知道自己的电脑上有无串口呢? -- 手动 1. 查看电脑,看是否有串口器件(串口是一个九针的D型接口) 2. 在设备管理器上查看 乍一看,还以为是有两个串口,其实仔细看描述就知道,这是蓝牙虚拟串口 ...

  2. 深入刨析tomcat 之---第8篇 how tomcat works 第11章 11.9应用程序,自定义Filter,及注册

    writed by 张艳涛, 标签:全网独一份, 自定义一个Filter 起因:在学习深入刨析tomcat的学习中,第11章,说了调用过滤链的原理,但没有给出实例来,自己经过分析,给出来了一个Filt ...

  3. 构建前端第7篇之---elementUI设置主题,进而改变全局button底色

    张艳涛写于2020-1-20 What:是elementUI主题? 是内置的格式,elementUI默认只有一个主题,如果想整体替换按钮的颜色等问题,那么就可以用主题 设置步骤 在路径src/styl ...

  4. AppWeb认证绕过漏洞(CVE-2018-8715)

    影响范围 Appweb 7.0.2及早期版本. 复现 构造头Authorization: Digest username=admin 返回包里包含session 发送POST请求,添加session到 ...

  5. GoldenEye-v1靶机

    仅供个人娱乐 靶机信息 下载地址:https://pan.baidu.com/s/1dzs_qx-YwYHk-vanbUeIxQ 一.主机扫描 二.信息收集 三.漏洞的查找和利用 boris    I ...

  6. [JS]回调函数和回调地狱

    回调函数 小明在奶茶店点了奶茶,店员开始制作奶茶,此时"制作奶茶"与"小明等待奶茶"是一个同时进行的不同的两个事件(任务),那么,小明获取店员制作成功的奶茶是从 ...

  7. 什么是CIDR?

    英文缩写: CIDR (Classless InterDomain Routing) 中文译名: 无类别域间路由选择 IP地址有"类"的概念,/8掩码是A类,/16掩码是B类,/2 ...

  8. Python 机器学习实战 —— 无监督学习(下)

    前言 在上篇< Python 机器学习实战 -- 无监督学习(上)>介绍了数据集变换中最常见的 PCA 主成分分析.NMF 非负矩阵分解等无监督模型,举例说明使用使用非监督模型对多维度特征 ...

  9. 内置函数 strlen

    1 //内置函数 strlen 2 //计算字符串的实际长度,不含字符串结束标准\0 3 4 #include<stdio.h> 5 #include<stdlib.h> 6 ...

  10. Configure Hosts with Puppet

    According to "Pro Puppet" 2nd edition, Chapter 2, "Creating a Module to Manage SSH&qu ...