mirror of
https://gitee.com/dromara/mayfly-go
synced 2025-11-03 16:00:25 +08:00
feat: 新增统一文件模块,统一文件操作
This commit is contained in:
@@ -9,10 +9,16 @@ import (
|
||||
|
||||
const DefaultDateTimeFormat = "2006-01-02 15:04:05"
|
||||
|
||||
// DefaultFormat 使用默认格式进行格式化: 2006-01-02 15:04:05
|
||||
func DefaultFormat(time time.Time) string {
|
||||
return time.Format(DefaultDateTimeFormat)
|
||||
}
|
||||
|
||||
// TimeNo 获取当前时间编号,格式为20060102150405
|
||||
func TimeNo() string {
|
||||
return time.Now().Format("20060102150405")
|
||||
}
|
||||
|
||||
func NewNullTime(t time.Time) NullTime {
|
||||
return NullTime{
|
||||
NullTime: sql.NullTime{
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
package writer
|
||||
|
||||
import (
|
||||
"io"
|
||||
"os"
|
||||
"path/filepath"
|
||||
)
|
||||
|
||||
type FileWriter struct {
|
||||
tryFlushCount int
|
||||
writer *os.File
|
||||
aborted bool
|
||||
}
|
||||
|
||||
func NewFileWriter(filePath string) *FileWriter {
|
||||
if filePath == "" {
|
||||
panic("filePath is empty")
|
||||
}
|
||||
|
||||
// 使用filepath.Dir函数提取文件夹路径
|
||||
dir := filepath.Dir(filePath)
|
||||
if dir != "" {
|
||||
// 检查文件夹路径,不存在则创建
|
||||
if _, err := os.Stat(dir); os.IsNotExist(err) {
|
||||
err = os.MkdirAll(dir, os.ModePerm)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fw, err := os.Create(filePath)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return &FileWriter{writer: fw}
|
||||
}
|
||||
|
||||
func (f *FileWriter) Close() {
|
||||
f.writer.Close()
|
||||
}
|
||||
|
||||
func (f *FileWriter) TryFlush() {
|
||||
}
|
||||
func (f *FileWriter) Write(b []byte) (n int, err error) {
|
||||
return f.writer.Write(b)
|
||||
}
|
||||
|
||||
func (f *FileWriter) WriteString(data string) {
|
||||
io.WriteString(f.writer, data)
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
package writer
|
||||
|
||||
import "io"
|
||||
|
||||
type CustomWriter interface {
|
||||
io.Writer
|
||||
WriteString(data string)
|
||||
Close()
|
||||
TryFlush()
|
||||
}
|
||||
26
server/pkg/utils/writerx/counting_writer.go
Normal file
26
server/pkg/utils/writerx/counting_writer.go
Normal file
@@ -0,0 +1,26 @@
|
||||
package writerx
|
||||
|
||||
import "io"
|
||||
|
||||
type CountingWriteCloser struct {
|
||||
w io.WriteCloser
|
||||
n int64 // 已写入的字节数
|
||||
}
|
||||
|
||||
func (c *CountingWriteCloser) Write(p []byte) (int, error) {
|
||||
n, err := c.w.Write(p)
|
||||
c.n += int64(n)
|
||||
return n, err
|
||||
}
|
||||
|
||||
func (c *CountingWriteCloser) Close() error {
|
||||
return c.w.Close()
|
||||
}
|
||||
|
||||
func (c *CountingWriteCloser) BytesWritten() int64 {
|
||||
return c.n
|
||||
}
|
||||
|
||||
func NewCountingWriteCloser(writer io.WriteCloser) *CountingWriteCloser {
|
||||
return &CountingWriteCloser{w: writer}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package writer
|
||||
package writerx
|
||||
|
||||
import (
|
||||
"compress/gzip"
|
||||
@@ -38,8 +38,8 @@ func (g *GzipWriter) Write(p []byte) (n int, err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func (g *GzipWriter) Close() {
|
||||
g.writer.Close()
|
||||
func (g *GzipWriter) Close() error {
|
||||
return g.writer.Close()
|
||||
}
|
||||
|
||||
func (g *GzipWriter) TryFlush() {
|
||||
21
server/pkg/utils/writerx/string_writer.go
Normal file
21
server/pkg/utils/writerx/string_writer.go
Normal file
@@ -0,0 +1,21 @@
|
||||
package writerx
|
||||
|
||||
import (
|
||||
"io"
|
||||
)
|
||||
|
||||
type StringWriter struct {
|
||||
io.WriteCloser
|
||||
}
|
||||
|
||||
func (sw *StringWriter) WriteString(s string) (n int, err error) {
|
||||
return sw.WriteCloser.Write([]byte(s))
|
||||
}
|
||||
|
||||
func (sw *StringWriter) Close() error {
|
||||
return sw.WriteCloser.Close()
|
||||
}
|
||||
|
||||
func NewStringWriter(writer io.WriteCloser) *StringWriter {
|
||||
return &StringWriter{WriteCloser: writer}
|
||||
}
|
||||
Reference in New Issue
Block a user