Create an empty text file

go io
25,439

Solution 1

Don't try to check the existence first, since you then have a race if the file is created at the same time. You can open the file with the O_CREATE flag to create it if it doesn't exist:

os.OpenFile(name, os.O_RDONLY|os.O_CREATE, 0666)

Solution 2

Just trying to improve the excellent accepted answer.

It's a good idea to check for errors and to Close() the opened file, since file descriptors are a limited resource. You can run out of file descriptors much sooner than a GC runs, and on Windows you can run into file sharing violations.

func TouchFile(name string) error {
    file, err := os.OpenFile(name, os.O_RDONLY|os.O_CREATE, 0644)
    if err != nil {
        return err
    }
    return file.Close()
}
Share:
25,439
Emi
Author by

Emi

Programming video games at Evelend and developing Open Source projects.

Updated on April 13, 2021

Comments

  • Emi
    Emi about 3 years

    I've been reading and googling all over but I can't seem to find this simple answer.

    I have a function that reads a file, but if the files doesn't exists it panics. What I want to do is a function that before reading, checks if the files exists, and if not, it creates an empty file. Here is what I have.

    func exists(path string) (bool, error) {
        _, err := os.Stat(path)
        if err == nil {
            return true, nil
        }
        if os.IsNotExist(err) {
            return false, nil
        }
        return true, err
    }
    
  • Emi
    Emi over 8 years
    Thanks for the quick reply, but how can I set flags to ioutil.ReadFile(fileName) ?
  • nussjustin
    nussjustin over 8 years
    @CoppolaEmilio You can't pass flags to ioutil.ReadFile, but you could just use os.OpenFile with ioutil.ReadAll
  • JimB
    JimB over 8 years
    @CoppolaEmilio: you don't. ioutil.ReadFile is just a convenience function to call os.Open and iotuil.ReadAll. If you need more control, you create your own similar function.
  • AndreKR
    AndreKR about 7 years
    Doesn't this leak a file descriptor?
  • AndreKR
    AndreKR about 7 years
    Ah, never mind, according to stackoverflow.com/a/8595507/476074 they are closed automatically.
  • JimB
    JimB almost 7 years
    @AndreKR: If you're worried about "leaking" file descriptors, you can't depend on the finalizer because finalizers are never guaranteed to run, but you should be closing the file anyway. Using os.O_CREATE to open a file and create it if it doesn't exist has nothing to do with making sure you call "Close"
  • AndreKR
    AndreKR almost 7 years
    Seems you are right, if there's no memory pressure it might never be GC'd. In that case I think the answer to "how to create an empty file" should include the call to Close().
  • Ace.C
    Ace.C about 6 years
    Can this be used to create directories?