LoginSignup
1
5

More than 3 years have passed since last update.

VisualStudioで初めてのexe(ファイルをリネームコピーするだけの簡単なやつ)

Last updated at Posted at 2021-05-05

何を作りたいん?

リネームコピーしたいファイルをexeに放り込んだら…
image.png
複製しつつ、現在時刻でリネームしてくれるやーつ。
image.png

ファイルをただコピペするだけだと…

  • 『てんぷれーと - コピー.clip』になったりして、描いた絵を画像で出力する時とかにファイル名重複しちゃう。
  • 別フォルダーに切り取りコピーすると作成日が上書きされて、管理する上でちょっとよろしくない。

ということがあるので、ファイル名に時間情報を埋め込みしたいです。
でも毎回手でファイル名変えるのは面倒くさい!

VisualStudoインストール

インストールまでの環境構築は ここ

プロジェクト作成

image.png
image.png
機能追加に合わせてウィンドウとかボタンとか設置したい場合を考えて、.NET Frameworkにします。
image.png
.NET FrameworkのバージョンはWindows10にデフォルトで用意されている4.5にしました。
他の人のPCでも安定して動いてもらうことが必要なら、最新すぎず、かといって古すぎない4.5が丁度いいかなって感じです。
個人で使う分にはバージョンはあまり気にしなくてもよいと思います。

引数チェックと放り込まれたファイルのパスを表示するところまで

Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace FileCopy
{
    class Program
    {
        static void Main(string[] args)
        {

            //引数バリデート
            if(args.Length != 1)
            {
                MessageBox.Show("コピー元のファイルを1つだけドラッグドロップして下さい。",
                    "エラー",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Error);
                return;
            }

            Console.WriteLine(args[0]);
            Console.WriteLine("↑exeにドラッグドロップしたファイルのパスです");
            Console.ReadKey();


        }
    }
}

コーディングする時に入力サポートしてくれるのが、VisualStudioの良いところです。

sing System.Windows.Forms; が抜けてると下記のようにサポートしてくれますです。
image.png
ダブルクリックすると自動で sing System.Windows.Forms; を入れてくれます。

image.png

ビルドでexe作成

ビルドするとexeが作成されます!
image.png
image.png

動かしてみよう

exeをただ起動したり、2ファイル以上を放り込むと下記になります。
image.png

ちゃんと1ファイルだけ放り込むと下記になります。
image.png
image.png

完成版

Program.cs
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace FileCopy
{
    class Program
    {
        static void Main(string[] args)
        {

            //引数バリデート
            if (args.Length != 1)
            {
                MessageBox.Show("コピー元のファイルを1つだけドラッグドロップして下さい。",
                    "エラー",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Error);
                return;
            }


            string from_file_path_ = args[0];


            //コピーするファイルパスを決定するぞい
            string to_file_path_;

            //元ファイルと同じフォルダーにコピーします
            to_file_path_ = Path.GetDirectoryName(from_file_path_) + @"\";

            //ファイル名は現在時刻を元に決定
            //2021年05月01日18時25分なら『20210501_1825』
            to_file_path_ += DateTime.Now.ToString("yyyyMMdd_HHmm");

            //拡張子は元ファイルから引き継ぎます
            to_file_path_ += Path.GetExtension(from_file_path_);


            //ファイル上書きになる場合はコピーせずに中断
            if (File.Exists(to_file_path_))
            {
                MessageBox.Show("ファイルの上書きが発生してしまうので処理を中断します。" + to_file_path_,
                    "エラー",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Error);
                return;
            }


            //ファイルコピー実行!
            File.Copy(from_file_path_, to_file_path_);


        }
    }
}

蛇足

  • メッセージボックス出す。
  • ファイルパスからフォルダーパスを取得。
  • ファイルパスから拡張子を取得。
  • フォーマットした現在時刻を取得。
  • ファイル存在チェック。
  • ファイルコピー。

とかよく使うのを盛り込んでみました。
try catchとか無いけどまあチュートリアルということで…

バージョン

Windows 10 Pro バージョン 20H2 OSビルド 19042.928
Visual Studio Community 2019 Version 16.9.4
.NET Framework 4.5

1
5
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
5