いろんなものはつながっている

ファイルの情報をコピー

報告書にファイル名、ファイルのサイズ、ファイルの更新日等を記載しないといけない場合がある。いちいちプロパティを開いてファイルサイズをコピーしてうんぬんなんてやってられないので、ファイルを選択しコンテキストメニューを開いてそこからメニューを選択することで必要な情報が必要なフォーマットでクリップボードにコピーされ、それをペーストするようにしようとした。

情報コピー1

しかし、いつも必要になるわけではないからそんなメニューが常にコンテキストメニューにでてきては邪魔だ。あまりスマートではないが、ひとつフォームを立ち上げてそこにファイルをドラッグ&ドロップすることで、ファイルの情報をフォーマットされてクリップボードにコピーされ、あとはペーストするだけということにしよう。

情報コピー2

フォームにファイルをドラッグ&ドロップできるようにするには
・フォームのAllowDropプロパティをTrueに設定する
・フォームのDragEnterイベント・ハンドラを記述する
・フォームのDragDropイベント・ハンドラを記述する
ということだ(*)

クリップボードにコピーするのは
Clipboard.SetDataObject(textToClipBoard, true);
でよいようだ(*)

フォーマットを変更するたびにビルドしなおすのはよくないので、フォーマットは外部ファイルで設定できるようにしたいが、まずはここでやめておこう。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace GetFileInfo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            this.AllowDrop = true;
            InitializeComponent();
        }

        List<string> filePathList = new List<string>();

        private void Form1_DragEnter(object sender, DragEventArgs e)
        {
            e.Effect = DragDropEffects.All;
        }

        private void Form1_DragDrop(object sender, DragEventArgs e)
        {
            filePathList.Clear();
            if(e.Data.GetDataPresent(DataFormats.FileDrop)){
                foreach(string filePath in 
                    (string[])e.Data.GetData(DataFormats.FileDrop))
                {
                    filePathList.Add(filePath);
                }

                if(filePathList.Count != 0)
                {
                    CopyToClipBoard();
                }
            }
        }

        private void CopyToClipBoard()
        {
            string textToClipBoard = "";

            foreach (string filePath in filePathList)
            {
                System.IO.FileInfo fi = new System.IO.FileInfo(filePath);
                string fileName = System.IO.Path.GetFileName(filePath);
                string fileSize = string.Format("{0:N0}", (fi.Length));
                string fileLastAccessTime= (fi.LastAccessTime).ToString("yyyy年MM月dd日 hh:mm:ss");
                textToClipBoard += fileName + "\t" + "ファイルサイズ:" + fileSize + "バイト" + "\t" + "アクセス日時:" +  fileLastAccessTime + "\n";
            }

            Clipboard.SetDataObject(textToClipBoard, true);
        }
    }
}

関連記事

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

スポンサード リンク

カテゴリー

スポンサード リンク