Go

[Go言語] ファイルをコピーする方法

More than 3 years have passed since last update.

はじめに

Go言語でファイルをコピーするには、いくつかの方法があります。ここでは、io.Copy()メソッドを使う方法を紹介します。

実行環境

  • Go 1.3
  • Mac OS X 10.9.3

プログラムの実行方法

今回作成するプログラムの名前は、copy.go とします。第一引数に、コピー元ファイル名、第二引数に、コピー先ファイル名を指定します。

プログラムの実行方法
go run copy.go コピー元ファイル名 コピー先ファイル名

コード

コードは以下のとおりです。os.Open()メソッドでコピー元ファイルを開き、os.Create()メソッドでコピー先ファイルを作成します(ファイルがすでに存在する場合は、そのファイルを開きます)。最後に、io.Copy()メソッドでファイルの中身をコピーします。

copy.go
package main

import (
    "io"
    "os"
)

func main() {
    srcName := os.Args[1]
    dstName := os.Args[2]

    src, err := os.Open(srcName)
    if err != nil {
        panic(err)
    }
    defer src.Close()

    dst, err := os.Create(dstName)
    if err != nil {
        panic(err)
    }
    defer dst.Close()

    _, err = io.Copy(dst, src)
    if  err != nil {
        panic(err)
    }
}

他の方法

以下の Stackoverflow の Mostafa さんの回答では、

  • 上記のコードのio.Copy()メソッドが行っている処理を、自分自身で実装する方法
  • bufioパッケージを使う方法
  • ioutilパッケージを使う方法

が紹介されています。

Stackoverflow - How to read/write from/to file?

参考文献

Package io

Package os