You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
850 B
39 lines
850 B
// Copyright 2012, Google Inc. All rights reserved. |
|
// Use of this source code is governed by a BSD-style |
|
// license that can be found in the LICENSE file. |
|
|
|
package ioutil2 |
|
|
|
import ( |
|
"io" |
|
"io/ioutil" |
|
"os" |
|
"path" |
|
) |
|
|
|
// Write file to temp and atomically move when everything else succeeds. |
|
func WriteFileAtomic(filename string, data []byte, perm os.FileMode) error { |
|
dir, name := path.Dir(filename), path.Base(filename) |
|
f, err := ioutil.TempFile(dir, name) |
|
if err != nil { |
|
return err |
|
} |
|
n, err := f.Write(data) |
|
f.Close() |
|
if err == nil && n < len(data) { |
|
err = io.ErrShortWrite |
|
} else { |
|
err = os.Chmod(f.Name(), perm) |
|
} |
|
if err != nil { |
|
os.Remove(f.Name()) |
|
return err |
|
} |
|
return os.Rename(f.Name(), filename) |
|
} |
|
|
|
// Check file exists or not |
|
func FileExists(name string) bool { |
|
_, err := os.Stat(name) |
|
return !os.IsNotExist(err) |
|
}
|
|
|