Golangを使用してディレクトリのすべてのコンテンツを削除するには?
2023-08-14 20:06:58
質問
私はGoの初心者ですが、内容がわからないときにディレクトリのすべての内容を削除する方法を見つけることができないようです。
私は試しました。
os.RemoveAll("/tmp/*")
os.Remove("/tmp/*")
とありますが
remove *: no such file or directory
または
invalid argument
.
もちろん、そうすれば
os.RemoveAll("/tmp/")
を削除すると
tmp
ディレクトリも削除してしまいます。これは私が欲しいものではありません。
どのように解決するのですか?
単純な
RemoveContents
という関数があります。例えば
package main
import (
"fmt"
"os"
"path/filepath"
"strings"
)
func RemoveContents(dir string) error {
d, err := os.Open(dir)
if err != nil {
return err
}
defer d.Close()
names, err := d.Readdirnames(-1)
if err != nil {
return err
}
for _, name := range names {
err = os.RemoveAll(filepath.Join(dir, name))
if err != nil {
return err
}
}
return nil
}
func main() {
dir := strings.TrimSuffix(filepath.Base(os.Args[0]), filepath.Ext(os.Args[0]))
dir = filepath.Join(os.TempDir(), dir)
dirs := filepath.Join(dir, `tmpdir`)
err := os.MkdirAll(dirs, 0777)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
file := filepath.Join(dir, `tmpfile`)
f, err := os.Create(file)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
f.Close()
file = filepath.Join(dirs, `tmpfile`)
f, err = os.Create(file)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
f.Close()
err = RemoveContents(dir)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
}
関連
-
[解決済み] 地図をコピーするには?
-
[解決済み】GoでJSONのPost Requestを処理する
-
[解決済み】Goでディレクトリを一覧表示する
-
[解決済み】Goはどうしてそんなに早くコンパイルできるのですか?
-
[解決済み】"testing "パッケージを使用したGoテストで印刷するにはどうすればいいですか?
-
[解決済み] カスタムパッケージの使用方法
-
[解決済み] reflectを使用して、構造体フィールドの値を設定するにはどうすればよいですか?
-
[解決済み] テキストファイルを文字列配列に読み込む(そして書き込む)
-
[解決済み] Goでシステムコマンドの出力を得るには?
-
[解決済み] Go テンプレートで変数キーを使用してマップ値にアクセスする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ゴルーチンの停止方法
-
[解決済み] 単一値コンテキストにおける複数値
-
[解決済み] golangのスライスで要素を検索する方法
-
[解決済み] ...interface{}の意味 (ドット・ドット・ドット・インターフェース)
-
[解決済み] Goのintとint64の違いは何ですか?
-
[解決済み] コンパイルしたファイルのサイズを小さくするには?
-
[解決済み] Go で / に異なるメソッドの http リクエストを処理するにはどうすればよいですか?
-
[解決済み] Goチャンネルはどのように実装されるのですか?
-
[解決済み] Goで一度に複数の変数を宣言できますか?
-
[解決済み] RWMutexの使い方は?