파일의 시간 속성을 변경하고 싶습니다! [C#]

14484 단어 fileIOWindowsC#

개요



이번에는 Raspberry PI가 아니라 Windows에서 파일의 속성인 「작성일시, 갱신일시, 액세스일시」를 지정한 일시에 변경하는 커멘드를 작성하고 싶습니다.

사전 작업



① 데스크톱에 Visual Studio 커뮤니티 버전을 설치합니다.

다운로드 사이트(★커뮤니티★)
h tps://ゔぃすあ lsつぢ오. 미 c 로소 ft. 코 m / 그럼 / 도 w 응 아 ds /



②설치 옵션은 모두 설치도 좋지만, 앱 개발을 하지 않으면 관련 패키지는 설치하지 않는 것이 좋다.

프로그램 내용



명령은 기본적으로 파라미터를 아무것도 지정하지 않으면 명령 사용법의 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
=======================================

끝에



이제 파일의 속성을 변경할 수 있습니다.
어떤 파일도 속성 변경이 가능합니다.
엑셀 파일이나 실행 파일 등도 가능합니다.
(^^)//

좋은 웹페이지 즐겨찾기