LoginSignup
0
0

More than 3 years have passed since last update.

ファイルの時間属性を変更したい![C#]

Posted at

概要

今回はRaspberry PIではなくWindowsでファイルの属性である「作成日時、更新日時、アクセス日時」を指定した日時に変更するコマンドを作成したいと思います。

事前作業

①デスクトップにVisual Studio communityバージョンをインストールします。

ダウンロードサイト(★コミュニティ★)
https://visualstudio.microsoft.com/ja/downloads/

image.png

②インストールオプションはすべてインストールも良いですが、アプリ開発をしないなら関連パッケージはインストールしない方がよいです。

プログラム内容

コマンドは基本的にパラメータを何も指定しない場合はコマンドの使い方のHELP内容が表示されるようにします。
①ファイル情報を確認したい場合、下記のコマンドで確認します。
例)finfo filename
②ファイル情報の「作成日時、更新日時、アクセス日時」を変更したい場合、下記のコマンドで確認します。
例)finfo filename "作成日時"
※作成日時が「更新日時、アクセス日時」に設定されます。
例)finfo filename "作成日時" "更新日時"
※作成日時、更新日時が該当属性に更新されます。アクセス日時には「更新日時」が設定されます。

プログラムソース

下記のソースを「Windowsのコンソールアプリケーション(.Net Framework)」プロジェクトから作成します。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace finfo
{
    class Program
    {
        static void Main(string[] args)
        {
            //ファイル属性変更は最大3個の引数
            if (args.Length >= 2)
            {
                fileEdit(args);
            }
            else if (args.Length == 1&& args[0] != "-h")
            {
                fileInfo(args[0]);
            }
            else
            {
                help();
            }
        }

        public static void help()
        {
            Console.WriteLine("=======================================");
            Console.WriteLine("使い方");
            Console.WriteLine("=======================================");
            Console.WriteLine("①ファイル情報出力の指定方");
            Console.WriteLine("例)finfo filename");
            Console.WriteLine("②ファイル情報出力の指定方");
            Console.WriteLine("例)finfo filename \"YYYY-MM-DD HH:MM:SS\"");
            Console.WriteLine("例)finfo filename \"YYYY-MM-DD HH:MM:SS\" \"YYYY-MM-DD HH:MM:SS\"");
            Console.WriteLine("=======================================");
        }

        public static void fileInfo(string file)
        {
            if (!File.Exists(file))
            {
                Console.WriteLine("指定したファイルは現在のフォルダに存在しません。");
                return;
            }

            var info = new FileInfo(file);
            Console.WriteLine("=======================================");
            Console.WriteLine("ファイル情報");
            Console.WriteLine("=======================================");
            Console.WriteLine("ファイル名   : " + info.Name);
            Console.WriteLine("ファイルパス : " + info.FullName);
            Console.WriteLine("作成日時     : " + info.CreationTime);
            Console.WriteLine("更新日時     : " + info.LastWriteTime);
            Console.WriteLine("サイズ       : " + info.Length + " Bytes");
            Console.WriteLine("アクセス日時 : " + info.LastAccessTime);
            Console.WriteLine("=======================================");
        }

        public static void fileEdit(string[] args)
        {
            DateTime createTime;
            DateTime writeTime;
            string file = "./" + args[0];

            if (!File.Exists(file))
            {
                Console.WriteLine("指定したファイルは現在のフォルダに存在しません。");
                return;
            }

            //時間を設定
            if (args.Length == 3)
            {
                createTime = Convert.ToDateTime(args[1]);
                writeTime = Convert.ToDateTime(args[2]);
            }
            else
            {
                createTime = Convert.ToDateTime(args[1]);
                writeTime = Convert.ToDateTime(args[1]);
            }

            var info = new FileInfo(file);

            //作成日時と更新日時を別々指定したい場合
            if (createTime != null && writeTime != null)
            {
                File.SetCreationTime(file, createTime);
                File.SetLastWriteTime(file, writeTime);
                File.SetLastAccessTime(file, writeTime);
            }
            //作成日時と更新日時を同じ日時に指定したい場合
            else
            {
                File.SetCreationTime(file, createTime);
                File.SetLastWriteTime(file, createTime);
                File.SetLastAccessTime(file, createTime);
            }

            Console.WriteLine("=======================================");
            Console.WriteLine("ファイル更新情報");
            Console.WriteLine("=======================================");
            Console.WriteLine("ファイル名   : " + info.Name);
            Console.WriteLine("ファイルパス : " + info.FullName);
            Console.WriteLine("作成日時     : " + info.CreationTime);
            Console.WriteLine("更新日時     : " + info.LastWriteTime);
            Console.WriteLine("サイズ       : " + info.Length + " Bytes");
            Console.WriteLine("アクセス日時 : " + info.LastAccessTime);
            Console.WriteLine("=======================================");
        }
    }
}

実行結果

下記の内容通りに動作することを確認しました。

C:\work\finfo\finfo\bin\Release>finfo.exe Program.cs
=======================================
ファイル情報
=======================================
ファイル名   : Program.cs
ファイルパス : C:\work\finfo\finfo\bin\Release\Program.cs
作成日時     : 2021/05/02 3:24:02
更新日時     : 2021/05/02 3:22:55
サイズ       : 4681 Bytes
アクセス日時 : 2021/05/02 3:24:03
=======================================
C:\work\finfo\finfo\bin\Release>finfo.exe Program.cs  "2021/05/02 23:58:02"
=======================================
ファイル更新情報
=======================================
ファイル名   : Program.cs
ファイルパス : C:\work\finfo\finfo\bin\Release\Program.cs
作成日時     : 2021/05/02 23:58:02
更新日時     : 2021/05/02 23:58:02
サイズ       : 4681 Bytes
アクセス日時 : 2021/05/02 23:58:02
=======================================

C:\work\finfo\finfo\bin\Release>finfo.exe Program.cs  "2021/05/02 23:58:02" "2021/05/02 23:59:32"
=======================================
ファイル更新情報
=======================================
ファイル名   : Program.cs
ファイルパス : C:\work\finfo\finfo\bin\Release\Program.cs
作成日時     : 2021/05/02 23:58:02
更新日時     : 2021/05/02 23:59:32
サイズ       : 4681 Bytes
アクセス日時 : 2021/05/02 23:59:32
=======================================

終わりに

これでファイルの属性を変更することができます。
どんなファイルも属性変更が可能です。
エクセルファイルまたは実行ファイルなども可能です。
(^^)//

0
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
0
0