Golang实现文件夹的创建与删除的方法详解
作者:剑客阿良_ALiang 发布时间:2024-02-02 13:57:02
标签:Golang,文件夹,创建,删除
学习笔记,写到哪是哪。
接着上一篇对纯文本文件读写操作,主要去实现一些文件夹操作。
创建文件夹
创建文件夹的时候往往要先判断文件夹是否存在。
样例代码如下
package main
import (
"bufio"
"fmt"
"io"
"os"
)
//判断文件夹是否存在
func HasDir(path string) (bool, error) {
_, _err := os.Stat(path)
if _err == nil {
return true, nil
}
if os.IsNotExist(_err) {
return false, nil
}
return false, _err
}
//创建文件夹
func CreateDir(path string) {
_exist, _err := HasDir(path)
if _err != nil {
fmt.Printf("获取文件夹异常 -> %v\n", _err)
return
}
if _exist {
fmt.Println("文件夹已存在!")
} else {
err := os.Mkdir(path, os.ModePerm)
if err != nil {
fmt.Printf("创建目录异常 -> %v\n", err)
} else {
fmt.Println("创建成功!")
}
}
}
func main() {
CreateDir("./output")
}
执行结果
创建成功!
Process finished with the exit code 0
注意
1、其中os.ModePerm主要是对创建文件夹的授权,了解linux的会比较熟悉。
其中 ModePerm FileMode = 0777,也就是最高权限,可读可写可执行。
也可以直接使用os.FileMode(644).String()。
删除文件和文件夹
使用os.Remove方法来删除文件,使用os.RemoveAll方法来删除文件夹。
可以看一下RemoveAll的内部实现,整体上就是遍历和递归操作。
样例代码如下
//删除文件
func RemoveFile(path string) error {
_err := os.Remove(path)
return _err
}
//删除文件夹
func RemoveDir(path string) error {
_err := os.RemoveAll(path)
return _err
}
小结
总的来说直接使用os,和Python一样,麻烦,还是得找个工具库来操作,方便简洁一点。而且一直往上传递error的方式让我头大,好烦啊。
补充
当然Golang还能实现一些常见的文件操作,如网络文件下载,读写csv文件等,以下是实现代码
网络文件下载
package main
import (
"fmt"
"github.com/zhangdapeng520/zdpgo_file"
)
func main() {
f := zdpgo_file.New()
savePath := "./"
// 单个下载
url := "https://avatar.csdnimg.cn/2/9/0/1_togolife.jpg"
err := f.Download.Download(savePath, url)
if err != nil {
fmt.Println("下载失败:", err)
} else {
fmt.Println("下载成功")
}
// 批量下载
urls := []string{
"https://alifei04.cfp.cn/creative/vcg/nowarter800/new/VCG41N695593548.jpg",
"https://tenfei02.cfp.cn/creative/vcg/nowarter800/new/VCG41N1014325904.jpg",
"https://tenfei05.cfp.cn/creative/vcg/nowater800/new/VCG41545444880.jpg",
}
f.Download.Downloads(savePath, urls)
}
读写csv
package main
import (
"fmt"
"github.com/zhangdapeng520/zdpgo_file"
)
func main() {
f := zdpgo_file.New()
data := [][]string{
{"a", "b", "c"},
{"111", "222", "333"},
{"111", "222", "333"},
{"111", "222", "333"},
{"111", "222", "333"},
{"111", "222", "333"},
{"111", "222", "333"},
{"111", "222", "333"},
{"111", "222", "333"},
{"111", "222", "333"},
{"111", "222", "333"},
}
// 写入
f.Csv.Write("test.csv", data)
// 读取
dataNew, err := f.Csv.Read("test.csv")
if err != nil {
fmt.Println(err)
}
fmt.Println(dataNew)
}
来源:https://blog.csdn.net/zhiweihongyan1/article/details/124950138


猜你喜欢
- 为什么使用生产者消费者模式在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发中,如果生产者处理速度很快,而消费者
- 本文主要给大家介绍了关于 Python中的字符串操作和编码Unicode的一些知识,下面话不多说,需要的朋友们下面来一起学习吧。字
- 闭包函数是什么?在开始学习的闭包的时候,大家很能都比较难理解.就从他的官方解释来说,都是比较概念化的.不过我们也还是从闭包的含义出发。闭包是
- 实例一:无参的存储过程$conn = mysql_connect('localhost','root',
- 一、介绍在做YOLOv3项目时,会需要将文本文件中的某部分内容进行批量替换和修改,所以编写了python程序批量替换所有文本文件 * 定部分的
- 一、前言容器使用沙箱机制,互相隔离,优势在于让各个部署在容器的里的应用互不影响,独立运行,提供更高的安全性。本文主要介绍python应用(d
- 一、排序排序查询语法:select * from 表名 order by 列1 asc/desc [,列2 asc/desc,..
- 在数字图像中,往往存在着一些特殊形状的几何图形,像检测马路边一条直线,检测人眼的圆形等等,有时我们需要把这些特定图形检测出来,hough变换
- 知识掌握 cv2.threshold()函数:设置固定级别的阈值应用于多通道矩阵,将灰度图像变换二值图像,或去除指定级别的噪声,或过滤掉过小
- 说下防止PHPDDOS发包的方法 if (eregi("ddos-udp",$read)) { fputs($verbi
- 引言我们前面的文章介绍了数字和字符串,比如我计算今天一天的开销花了多少钱我可以用数字来表示,如果是整形用 int ,如果是小数用 float
- 背包问题现在要往一个可以装4个单位重量的背包里怎么装价值最高:A重量1个单位,价值15;B重量3个单位,价值20;C重量4个重量,价值30使
- 什么是fixture根据pytest官方文档的说明,fixture可以简单的归纳为具有以下功能的函数:配置测试前系统的初始状态;定义传入测试
- 由于想要使用pycharm连接Window子系统Ubuntu进行开发,找了很多教程都不够详细,花了点儿时间,最后配置成功。将pycharm连
- 图片轮播滤镜转换效果,只支持ie浏览器<img width="156" height="60"
- 本文实例讲述了Python实现复杂对象转JSON的方法。分享给大家供大家参考,具体如下:在Python对于简单的对象转json还是比较简单的
- 这篇文章主要给大家介绍了关于Django跨域请求问题解决的相关资料,文中介绍的实现方法包括:使用django-cors-headers全局控
- 对于变量的访问和设置,我们可以使用get、set方法,如下:class student: def __init__(self,n
- Python是一种非常实用的高级编程语言,它的易读性和简洁性使其成为初学者的首选语言。然而,Python的功能远不止于此,它的强大库支持使其
- 小编想把用python将列表[1,1,1,1,1,1,1,1,1,1] 和 列表 [2,2,2,2,2,2,2,2,2,2]对应相加成[3,