diff --git a/fileutil/file.go b/fileutil/file.go index 357b459..7db1685 100644 --- a/fileutil/file.go +++ b/fileutil/file.go @@ -453,3 +453,35 @@ func ReadCsvFile(filepath string) ([][]string, error) { return records, nil } + +// WriteStringToFile write string to target file. +// Play: todo +func WriteStringToFile(filepath string, content string, append bool) error { + flag := os.O_RDWR | os.O_CREATE + if append { + flag = flag | os.O_APPEND + } + + f, err := os.OpenFile(filepath, flag, 0644) + if err != nil { + return err + } + defer f.Close() + + _, err = f.WriteString(content) + return err +} + +// WriteBytesToFile write bytes to target file. +// Play: todo +func WriteBytesToFile(filepath string, content []byte) error { + f, err := os.OpenFile(filepath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644) + if err != nil { + return err + } + + defer f.Close() + + _, err = f.Write(content) + return err +} diff --git a/fileutil/file_example_test.go b/fileutil/file_example_test.go index e883384..6d7e147 100644 --- a/fileutil/file_example_test.go +++ b/fileutil/file_example_test.go @@ -285,3 +285,59 @@ func ExampleReadCsvFile() { // [[Bob 12 male] [Duke 14 male] [Lucy 16 female]] // } + +func ExampleWriteStringToFile() { + filepath := "./test.txt" + + file, err := os.Create(filepath) + if err != nil { + return + } + + defer file.Close() + + err = WriteStringToFile(filepath, "hello", true) + if err != nil { + return + } + + content, err := ReadFileToString(filepath) + if err != nil { + return + } + + os.Remove(filepath) + + fmt.Println(content) + + // Output: + // hello +} + +func ExampleWriteBytesToFile() { + filepath := "./bytes.txt" + + file, err := os.Create(filepath) + if err != nil { + return + } + + defer file.Close() + + err = WriteBytesToFile(filepath, []byte("hello")) + if err != nil { + return + } + + content, err := ReadFileToString(filepath) + if err != nil { + return + } + + os.Remove(filepath) + + fmt.Println(content) + + // Output: + // hello +} diff --git a/fileutil/file_test.go b/fileutil/file_test.go index 60ddbc5..acdec64 100644 --- a/fileutil/file_test.go +++ b/fileutil/file_test.go @@ -296,3 +296,68 @@ func TestReadCsvFile(t *testing.T) { assert.Equal(3, len(content[0])) assert.Equal("Bob", content[0][0]) } + +func TestWriteStringToFile(t *testing.T) { + assert := internal.NewAssert(t, "TestWriteStringToFile") + + filepath := "./test.txt" + + file, err := os.Create(filepath) + if err != nil { + t.Fail() + } + + defer file.Close() + + err = WriteStringToFile(filepath, "hello", false) + if err != nil { + t.Fail() + } + + content1, err := ReadFileToString(filepath) + if err != nil { + t.Fail() + } + + err = WriteStringToFile(filepath, " world", true) + if err != nil { + t.Fail() + } + + content2, err := os.ReadFile(filepath) + if err != nil { + t.Fail() + } + + assert.Equal("hello", content1) + assert.Equal("hello world", string(content2)) + + os.Remove(filepath) +} + +func TestWriteBytesToFile(t *testing.T) { + assert := internal.NewAssert(t, "TestWriteBytesToFile") + + filepath := "./bytes.txt" + + file, err := os.Create(filepath) + if err != nil { + t.Fail() + } + + defer file.Close() + + err = WriteBytesToFile(filepath, []byte("hello")) + if err != nil { + t.Fail() + } + + content, err := os.ReadFile(filepath) + if err != nil { + t.Fail() + } + + assert.Equal("hello", string(content)) + + os.Remove(filepath) +}