zoukankan      html  css  js  c++  java
  • Go

     基本介绍   
        文件对我们并不陌生,文件是数据源(保存数据的地方)的一种,比如大家经常使用的word文档,txt文件,excel文件...都是文件。文件最主要的作用就是保存数据,它既可以保存一张图片,也可以保存视频,声音...
        文件在程序中是以流的形式来操作的;
        流:数据在数据源(文件) 和程序(内存)之间经历的路径;
        输入流(读文件):数据从数据源(文件)到程序(内存)的路径;
        输出流(写文件):数据从程序(内存)到数据源(文件)的路径;
     
    主要是os包里的File的结构体来对文件进行操作; File代表一个打开的文件对象。
     
    常用的文件操作函数和方法
        打开一个文件进行读操作;
            os.Open(name string) (*File, error)
        关闭一个文件:
            File.Close()
        小小的demo
            // 通过os 打开一个文件    
            // file 的叫法:file对象, file指针, file 文件句柄     
            file, error := os.Open("e:/text01.txt")     
            if error != nil {         
                fmt.Println("open file error=", error)     
            }     
            // 输出下文件,看看文件是什么? 文件就是指针 *File     
            fmt.Printf("file==%v", file)  // file==&{0xc000080780}     
            // 关闭文件     
            error = file.Close()     
            if error != nil {         
                fmt.Println("close file error=", error)     
            }
     
     
    写文件操作应用实例
        func OpenFile(name string, flag int, perm FileMode) (file *File, err error)
     
        说明:os.OpenFile 是一个更一般性的文件打开函数,它会使用指定的选项(如O_RDONLY等),指定的模式(如0666等)打开指定名称的文件。如果操作成功,返回的文件对象可用于I/O。如果出错,错误底层类型就是 *PathError.
     
        第二个参数:文件打开模式(可以组合);
        第三个参数:权限控制(linux/unix下使用)
            r --> 4
            w --> 2
            x --> 1
     
    实际案例:
        // 创建一个新文件,写入内容 5句 "hello, Gardon"    
        // 1.打开文件 e:/abc_w.txt     
        filePath := "e:/abc_w.txt"     
        file, err := os.OpenFile(filePath, os.O_WRONLY | os.O_CREATE, 0666)     
        if err != nil {         
            fmt.Println("open fiel err=", err)         
            return      
        }     
        // 及时关闭file句柄     
        defer file.Close()     
        // 准备写入内容     
        str := "hello, Gardon "     
        // 写入时,使用带缓存的 *Writer     
        writer := bufio.NewWriter(file)     
        for i:=0; i < 5; i ++ {         
            writer.WriteString(str)     
        }     
        // 因为writer是带缓存,因此在调用WriteString方法时,其实     
        // 内存是先写入到缓存的,所以需要调用Flush方法,将缓存的数据     
        // 真正写入到文件中,否则文件中会没有数据     
        writer.Flush()
     
    判断文件是否存在
        golang判断文件或者文件夹是否存在的方法使用os.Stat() 函数返回的错误值进行判断:
            1.如果返回的错误为nil,说明文件或者文件夹存在
            2.如果返回的错误类型使用os.IsNotExist() 判断为true,说明文件或者文件夹不存在
            3.如果返回的错误为其他类型,则不确定是否存在
        
        实现的功能函数
            func PathExists(filePath string) (bool, error) {    
                _, err := os.Stat(filePath)     
                if err == nil { // 为空说明存在         
                    return true, nil      
                }     
                if os.IsNotExist(err) {  // 不存在 返回 false         
                    return false, nil      
                }     
                return false, err  
            }
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    WPF关于改变ListBoxItem的颜色的注意事项以及如何找到ListBox中的ItemsPanel
    WPF中关于配置文件的读取
    C++虚函数和虚函数表
    gdb调试技巧
    libevent和基于libevent的网络编程
    Reactor模式详解
    Ubuntu Linux 下文件名乱码(无效的编码)的快速解决办法
    Linux进程间通信——使用共享内存
    Linux进程间通信——使用信号量
    布隆过滤器(Bloom Filter)详解
  • 原文地址:https://www.cnblogs.com/guo-s/p/14189763.html
Copyright © 2011-2022 走看看