Skip to content

Instantly share code, notes, and snippets.

@ando19721226
Created July 25, 2018 06:49
Show Gist options
  • Save ando19721226/1ea52a1d674b7369da3b182ef8702e0e to your computer and use it in GitHub Desktop.
Save ando19721226/1ea52a1d674b7369da3b182ef8702e0e to your computer and use it in GitHub Desktop.
任意のサイズのファイルを作る
package main
import (
"crypto/rand"
"flag"
"fmt"
"io"
"os"
"strconv"
)
var (
kilo = flag.Bool("k", false, "単位をキロバイトで指定します。")
mega = flag.Bool("m", false, "単位をメガバイトで指定します。")
giga = flag.Bool("g", false, "単位をギガバイトで指定します。")
out = flag.String("o", "dummy", "出力先のファイル名です。")
)
func main() {
// -h オプション用文言
flag.Usage = func() {
fmt.Fprintln(os.Stderr, "\n指定サイズのファイルを生成します。")
fmt.Fprintln(os.Stderr, "ファイルの中身はランダムなバイトで埋めます。\n")
fmt.Fprintf(os.Stderr, "使い方\n")
fmt.Fprintf(os.Stderr, " %s [オプション] ファイルサイズ\n", os.Args[0])
fmt.Fprintf(os.Stderr, "オプション:\n")
flag.PrintDefaults()
fmt.Fprintf(os.Stderr, "例:\n")
fmt.Fprintf(os.Stderr, " 以下は、10KBのresult.datを生成します。\n")
fmt.Fprintf(os.Stderr, " %s -o result.dat -k 10\n", os.Args[0])
os.Exit(0)
}
flag.Parse()
size, err := strconv.ParseInt(flag.Arg(0), 10, 64)
if err != nil {
flag.Usage()
os.Exit(1)
}
f, err := os.Create(*out)
if err != nil {
panic(err)
}
defer f.Close()
s := size
if *kilo {
s = s * 1024
} else if *mega {
s = s * 1024 * 1024
} else if *giga {
s = s * 1024 * 1024 * 1024
}
io.CopyN(f, rand.Reader, s)
fmt.Printf("ファイル名が'%s'のファイルを出力しました。\n", *out)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment