Skip to content

Commit

Permalink
feat: add IsZipFile
Browse files Browse the repository at this point in the history
  • Loading branch information
duke-git committed Apr 24, 2023
1 parent aaf4501 commit 5e79eaa
Show file tree
Hide file tree
Showing 6 changed files with 95 additions and 3 deletions.
29 changes: 28 additions & 1 deletion docs/fileutil.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ import (
- [ReadFileByLine](#ReadFileByLine)
- [Zip](#Zip)
- [UnZip](#UnZip)
- [UnZip](#UnZip)
- [IsZipFile](#IsZipFile)

<div STYLE="page-break-after: always;"></div>

Expand Down Expand Up @@ -496,3 +496,30 @@ func main() {
}
}
```


### <span id="IsZipFile">IsZipFile</span>

<p>Checks if file is zip file or not.</p>

<b>Signature:</b>

```go
func IsZipFile(filepath string) bool
```

<b>Example:</b>

```go
package main

import (
"fmt"
"github.com/duke-git/lancet/v2/fileutil"
)

func main() {
isZip := IsZipFile("./zipfile.zip")
fmt.Println(isZip)
}
```
29 changes: 28 additions & 1 deletion docs/fileutil_zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ import (
- [ReadFileByLine](#ReadFileByLine)
- [Zip](#Zip)
- [UnZip](#UnZip)
- [IsZipFile](#IsZipFile)

<div STYLE="page-break-after: always;"></div>

Expand Down Expand Up @@ -472,7 +473,7 @@ func main() {

<p>zip解压缩文件并保存在目录中</p>

<b>Signature:</b>
<b>函数签名:</b>

```go
func UnZip(zipFile string, destPath string) error
Expand All @@ -495,3 +496,29 @@ func main() {
}
}
```

### <span id="IsZipFile">IsZipFile</span>

<p>判断文件是否是zip压缩文件。</p>

<b>函数签名:</b>

```go
func IsZipFile(filepath string) bool
```

<b>示例:</b>

```go
package main

import (
"fmt"
"github.com/duke-git/lancet/v2/fileutil"
)

func main() {
isZip := IsZipFile("./zipfile.zip")
fmt.Println(isZip)
}
```
19 changes: 19 additions & 0 deletions fileutil/file.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ package fileutil
import (
"archive/zip"
"bufio"
"bytes"
"errors"
"fmt"
"io"
Expand Down Expand Up @@ -174,6 +175,23 @@ func ListFileNames(path string) ([]string, error) {
return result, nil
}

// IsZipFile checks if file is zip or not.
// Play: todo
func IsZipFile(filepath string) bool {
f, err := os.Open(filepath)
if err != nil {
return false
}
defer f.Close()

buf := make([]byte, 4)
if n, err := f.Read(buf); err != nil || n < 4 {
return false
}

return bytes.Equal(buf, []byte("PK\x03\x04"))
}

// Zip create zip file, fpath could be a single file or a directory.
// Play: https://go.dev/play/p/j-3sWBp8ik_P
func Zip(fpath string, destPath string) error {
Expand Down Expand Up @@ -276,6 +294,7 @@ func UnZip(zipFile string, destPath string) error {
}
}
}

return nil
}

Expand Down
12 changes: 12 additions & 0 deletions fileutil/file_example_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -223,3 +223,15 @@ func ExampleUnZip() {
// Output:
// application/octet-stream
}

func ExampleIsZipFile() {
result1 := IsZipFile("./file.go")
result2 := IsZipFile("./test/file.go.zip")

fmt.Println(result1)
fmt.Println(result2)

// Output:
// false
// true
}
7 changes: 7 additions & 0 deletions fileutil/file_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -246,3 +246,10 @@ func TestCurrentPath(t *testing.T) {
absPath := CurrentPath()
t.Log(absPath)
}

func TestIsZipFile(t *testing.T) {
assert := internal.NewAssert(t, "TestIsZipFile")

assert.Equal(false, IsZipFile("./file.go"))
assert.Equal(true, IsZipFile("./test/file.go.zip"))
}
2 changes: 1 addition & 1 deletion internal/assert.go
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ func compare(x, y any) int {

}

// logFailedInfo make test failed and log error info
// makeTestFailed make test failed and log error info
func makeTestFailed(t *testing.T, caseName string, expected, actual any) {
_, file, line, _ := runtime.Caller(2)
errInfo := fmt.Sprintf("Case %v failed. file: %v, line: %v, expected: %v, actual: %v.", caseName, file, line, expected, actual)
Expand Down

0 comments on commit 5e79eaa

Please sign in to comment.