Skip to content

Commit 0081194

Browse files
committed
feat: file
1 parent e3c608a commit 0081194

File tree

2 files changed

+70
-6
lines changed

2 files changed

+70
-6
lines changed

file.go

+65-4
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package rose
22

33
import (
44
"archive/zip"
5+
"bufio"
56
"io"
67
"os"
78
"path/filepath"
@@ -131,12 +132,13 @@ func FReadFile(filePath string) (string, error) {
131132

132133
// FWriteFile 直接写入文件(适用于小文件写入)
133134
func FWriteFile(filePath string, data string, append bool) error {
134-
flagIsAppend := os.O_TRUNC // 默认覆盖
135+
flag := os.O_WRONLY | os.O_CREATE
135136
if append {
136-
flagIsAppend = os.O_APPEND // 追加
137+
flag |= os.O_APPEND
138+
} else {
139+
flag |= os.O_TRUNC
137140
}
138-
139-
f, err := os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE|flagIsAppend, 0666)
141+
f, err := os.OpenFile(filePath, flag, 0666)
140142
if err != nil {
141143
return err
142144
}
@@ -148,3 +150,62 @@ func FWriteFile(filePath string, data string, append bool) error {
148150
}
149151
return nil
150152
}
153+
154+
func FReadBigFile(filePath string, writer io.Writer) error {
155+
file, err := os.Open(filePath)
156+
if err != nil {
157+
return err
158+
}
159+
defer file.Close()
160+
161+
reader := bufio.NewReader(file)
162+
buffer := make([]byte, 4096)
163+
for {
164+
n, err := reader.Read(buffer)
165+
if err != nil && err != io.EOF {
166+
return err
167+
}
168+
if n == 0 {
169+
break
170+
}
171+
if _, err := writer.Write(buffer[:n]); err != nil {
172+
return err
173+
}
174+
}
175+
return nil
176+
}
177+
178+
// FWriteBigFile 写入大文件
179+
func FWriteBigFile(filePath string, data string, append bool) error {
180+
//file, err := os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666)
181+
//if err != nil {
182+
// return err
183+
//}
184+
//defer file.Close()
185+
//
186+
//buf := bufio.NewWriter(file)
187+
//_, err = buf.WriteString(data)
188+
//
189+
//io.WriteString()
190+
//
191+
//err = buf.Flush()
192+
//return err
193+
194+
flag := os.O_WRONLY | os.O_CREATE
195+
if append {
196+
flag |= os.O_APPEND
197+
} else {
198+
flag |= os.O_TRUNC
199+
}
200+
file, err := os.OpenFile(filePath, flag, 0666)
201+
if err != nil {
202+
return err
203+
}
204+
defer file.Close()
205+
206+
_, err = io.WriteString(file, data)
207+
if err != nil {
208+
return err
209+
}
210+
return nil
211+
}

file_test.go

+5-2
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,12 @@
88

99
package rose
1010

11-
import "testing"
11+
import (
12+
"testing"
13+
)
1214

1315
func TestFWriteFile(t *testing.T) {
14-
t.Log(FWriteFile("aaa.txt", "333hello world444", true))
16+
//t.Log(FWriteFile("aaa.txt", "333hello world444", true))
1517

18+
//t.Log(FWriteBigFile("aaa.txt", "hello", true))
1619
}

0 commit comments

Comments
 (0)