LoginSignup
1
0

More than 3 years have passed since last update.

ファイルのコピー処理

Posted at
man.go
package main

import (
    "bufio"
    "fmt"
    "os"
    "os/exec"
    "path/filepath"
    "regexp"
)

const (
    // 検索対象のパス。検索したいフォルダのパスを指定する
    Root = `xxx\xxx\xxx`
    // コピーしたフォルダを指定
    DestPath = `xxx\xxx\`
)

var (
    // マッチしたファイルを追加するため変数
    file  string
    // 検索ワードを正規表現化して入れておく変数
    re *regexp.Regexp
)

// filepath.Walk に渡す関数
func visit(path string, info os.FileInfo, err error) error {
    if err != nil {
        return err
    }

    // ファイル検索
    if !info.IsDir() && re.MatchString(info.Name()) {
        //同じファイルがあっても上書き
        file = path
    }

    return nil
}

func search(checkFile string) error {

    // 正規表現
    var err error
    re, err = regexp.Compile(checkFile)
    if err != nil {
        fmt.Fprintf(os.Stderr, "error: %s\n", err)
        os.Exit(1)
    }

    err = filepath.Walk(Root, visit)
    if err != nil {
        return err
    }

    // マッチしたファイルがなければ終了する
    if len(file) == 0 {
        return fmt.Errorf("file not matched")
    }

    // ファイルのコピー
    /* このやり方だと、コピーではなく転記になる
    w, err := os.Create(DestPath + checkFile)
    if err != nil {
        log.Fatal(err)
    }

    r, err := os.Open(file)
    if err != nil {
        log.Fatal(err)
    }

    _, err = io.Copy(w, r)
    if err != nil {
        log.Fatal(err)
    }
    */
    cmd := exec.Command("cmd.exe", "/C", "copy", "/Y", file, DestPath)
    cmd.Start()

    return nil
}

func main() {
    fmt.Println("ファイル読み取り処理を開始します")
    // 検索対象のファイル名が記載されたファイルをOpenする
    f, err := os.Open("xxxx.txt")
    // 読み取り時の例外処理
    if err != nil {
        fmt.Println("error")
    }
    // 関数が終了した際に確実に閉じるようにする
    defer f.Close()

    // 1行づつ読込む
    scanner := bufio.NewScanner(f)

    for scanner.Scan() {
        // 一行ずつ処理
        err = search(scanner.Text())
        if err != nil {
            fmt.Fprintf(os.Stderr, "error: %s\n", err)
        }
    }
}
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0