Create an empty text file
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()
}
![Emi](https://i.stack.imgur.com/Dt8uA.jpg?s=256&g=1)
Emi
Programming video games at Evelend and developing Open Source projects.
Updated on April 13, 2021Comments
-
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 over 8 yearsThanks for the quick reply, but how can I set flags to
ioutil.ReadFile(fileName)
? -
nussjustin over 8 years@CoppolaEmilio You can't pass flags to ioutil.ReadFile, but you could just use os.OpenFile with ioutil.ReadAll
-
JimB over 8 years@CoppolaEmilio: you don't.
ioutil.ReadFile
is just a convenience function to callos.Open
andiotuil.ReadAll
. If you need more control, you create your own similar function. -
AndreKR about 7 yearsDoesn't this leak a file descriptor?
-
AndreKR about 7 yearsAh, never mind, according to stackoverflow.com/a/8595507/476074 they are closed automatically.
-
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 almost 7 yearsSeems 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 about 6 yearsCan this be used to create directories?