@@ -2,6 +2,7 @@ package rose
2
2
3
3
import (
4
4
"archive/zip"
5
+ "bufio"
5
6
"io"
6
7
"os"
7
8
"path/filepath"
@@ -131,12 +132,13 @@ func FReadFile(filePath string) (string, error) {
131
132
132
133
// FWriteFile 直接写入文件(适用于小文件写入)
133
134
func FWriteFile (filePath string , data string , append bool ) error {
134
- flagIsAppend := os .O_TRUNC // 默认覆盖
135
+ flag := os .O_WRONLY | os . O_CREATE
135
136
if append {
136
- flagIsAppend = os .O_APPEND // 追加
137
+ flag |= os .O_APPEND
138
+ } else {
139
+ flag |= os .O_TRUNC
137
140
}
138
-
139
- f , err := os .OpenFile (filePath , os .O_WRONLY | os .O_CREATE | flagIsAppend , 0666 )
141
+ f , err := os .OpenFile (filePath , flag , 0666 )
140
142
if err != nil {
141
143
return err
142
144
}
@@ -148,3 +150,62 @@ func FWriteFile(filePath string, data string, append bool) error {
148
150
}
149
151
return nil
150
152
}
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
+ }
0 commit comments