gpt4 book ai didi

go - 使用Go检查目录中是否不存在文件扩展名

转载 作者:行者123 更新时间:2023-12-01 20:22:30 24 4
gpt4 key购买 nike

我正在尝试检查目录是否没有扩展名为“.rpm”的文件。我将不知道文件名是什么,每个目录将有多个文件。

这是我的代码:

import {
"fmt"
"os"
"path/filepath"
}

func main() {
dirname := "." + string(filepath.Separator)

d, err := os.Open(dirname)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
defer d.Close()

files, err := d.Readdir(-1)
if err != nil {
fmt.Println(err)
os.Exit(1)
}

fmt.Print("\n" + "Reading " + dirname)

for _, file := range files {
if file.Mode().IsRegular() {
// TODO: if rpm file not present, print no rpm file found
if filepath.Ext(file.Name()) == ".rpm" {
fmt.Println(file.Name() + "\n")
f, err := os.Open(file.Name())
if err != nil {
panic(err)
}
}
}
}
}

上面的代码将打开当前目录中的所有.rpm文件。

我想检查以下内容:如果当前目录的文件列表中不存在“.rpm”文件,则打印“rpm不存在”和os.Exit。

我已经试过这段代码:
if filepath.Ext(file.Name()) != ".rpm" {
fmt.Println("no rpm found")
}

我尝试使用
if filepath.Ext(file.Name()) == ".rpm" {
... *code above* ...
} else {
fmt.Println("ERR: RPM file does not exist")
}

我遇到了这样的错误:如果存在其他文件而没有扩展名.rpm,则它将提示错误。

如何在没有文件名的情况下进行此操作?

最佳答案

在任何一次迭代中都无法告知文件是否都没有.rpm扩展名。检查完所有文件后,您才能确定地确定。

因此,不要试图将其压缩到循环中,而是要维护一个found变量,该变量可以在找到.rpm文件时更新。

found := false // Assume false for now
for _, file := range files {
if file.Mode().IsRegular() {
if filepath.Ext(file.Name()) == ".rpm" {
// Process rpm file, and:
found = true
}
}
}

if !found {
fmt.Println("rpm file not found")
}

如果仅需要处理1个 .rpm文件,则不需要“状态”管理( found变量)。如果找到并处理了一个 .rpm文件,则可以返回,如果到达循环结束,您将知道没有任何 rpm文件:
for _, file := range files {
if file.Mode().IsRegular() {
if filepath.Ext(file.Name()) == ".rpm" {
// Process rpm file, and:
return
}
}
}

// We returned earlier if rpm was found, so here we know there isn't any:
fmt.Println("rpm file not found")

关于go - 使用Go检查目录中是否不存在文件扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60384700/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com