【フォルダ整理】ファイル名の先頭に更新日を示す 8 桁の数字を挿入する Windows アプリケーションを公開してみる

ファイル名の先頭に更新日を示す 8 桁の数字を
挿入する Windows アプリケーションを作成したため
皆さんの役に立てればと思い
ソースと本体を公開したいと思います。

[本体はこちら(BOOTH)](https://giftedstyle.booth.pm/items/5837362)
[本体はこちら(Google Drive)](https://drive.google.com/file/d/1GwCVe90_ze6Mhap39KdtNj0vSSJ-M8Ff/view?usp=sharing)

***

このアプリケーションの説明

ファイル名の先頭に更新日を示す 8 桁の数字を
挿入する Windows アプリケーションです。

![image1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3752886/094a670e-016d-eb62-5881-37d105b314e5.png)
![image2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3752886/59282963-5bac-203d-ffab-63b922843c82.png)
![image3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3752886/baf96f32-7c95-0494-7e77-fb2eea2fb094.png)

更新日が 2024年4月1日ならば
edit.php は 20240401edit.php になります。

更新日をファイル名の先頭に付けたい
フォルダ or ファイルをドラッグ＆ドロップして使用します。

フォルダをドラッグ＆ドロップした場合は
子要素孫要素が名称変更の対象になります。
なので親フォルダごとドラッグ＆ドロップすると楽に操作出来ます。

フォルダをドラッグ＆ドロップした場合のみ
バックアップの zip が生成されます。

***

このアプリケーションのソースコード

Visual Studio の Windows フォームで作成しています。
ソースコードは下記の内容です。

```Csharp:使用したコード
using System.IO.Compression;

namespace SephirothFolderOrganization
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void panel1_DragDrop(object sender, DragEventArgs e)
        {
            if (e.Data == null)
            {
                return;
            }
            object? data = e.Data.GetData(DataFormats.FileDrop, false);
            if (data == null)
            {
                return;
            }

            string[] files1 = (string[])data;

            for (int i = 0; i < files1.Length; i++)
            {
                string pathName1 = files1[i];
                if (System.IO.Directory.Exists(pathName1))
                {
                    ZipFile.CreateFromDirectory(
                    pathName1,
                    pathName1.Substring(0, pathName1.LastIndexOf("\\")) + "\\" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + pathName1.Substring(pathName1.LastIndexOf("\\") + 1) + "_BackUP.zip");

                    string[] files2 = Directory.GetFiles(pathName1, "*", System.IO.SearchOption.AllDirectories);
                    for (int j = 0; j < files2.Length; j++)
                    {
                        string pathName2 = files2[j];
                        string fileName2 = System.IO.Path.GetFileName(pathName2);

                        //既に日付があるならばスキップ
                        try
                        {
                            int.Parse(fileName2.Substring(0, 8));
                            continue;
                        }
                        catch
                        {
                        }

                        string dateString = System.IO.File.GetLastWriteTime(pathName2).ToString("yyyyMMdd");

                        string resultPathName2 = pathName2.Substring(0, pathName2.LastIndexOf("\\")) + "\\" + dateString + fileName2;

                        System.IO.File.Move(pathName2, resultPathName2);
                    }
                }
                else
                {
                    string fileName1 = System.IO.Path.GetFileName(pathName1);

                    //既に日付があるならばスキップ
                    try
                    {
                        int.Parse(fileName1.Substring(0, 8));
                        continue;
                    }
                    catch
                    {
                    }

                    string dateString = System.IO.File.GetLastWriteTime(pathName1).ToString("yyyyMMdd");

                    string resultPathName1 = pathName1.Substring(0, pathName1.LastIndexOf("\\")) + "\\" + dateString + fileName1;

                    System.IO.File.Move(pathName1, resultPathName1);
                }
            }

            MessageBox.Show(
                    "仕分けが完了しました。", "確認",
                    MessageBoxButtons.YesNo, MessageBoxIcon.Question
                    );
        }

        private void panel1_DragEnter(object sender, DragEventArgs e)
        {
            if (e.Data == null)
            {
                return;
            }
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
            {
                e.Effect = DragDropEffects.All;
            }
            else
            {
                e.Effect = DragDropEffects.None;
            }
        }
    }
}
```

***

以上 Windows アプリケーションを公開しました。

Visual Studio の Windows フォームは
フォルダ整理をしたい時等に
補助用のアプリケーションを
簡単に作成する事ができます。

皆さんもフォルダ整理の際は
Visual Studio を活用してみては
いかがでしょうか？

皆さんの開発の助けになれますように
閲覧ありがとうございました。