Cygwinでファイル名をフルパスでクリップボードにコピー

Cygwinをメインに使っている場合、ファイルへのパスが実際の場所と違うのに困ることがある。たとえばファイルをメールソフトに添付するときとか。だいたいディレクトリは深くなるので、いちいちメーラで目的のディレクトリまで降りていくのは面倒だ。

というわけで、コマンドラインからファイル名を指定したらそのフルパスをクリップボードにコピーするコードを書いてみた。

以下ソース。ccp.csという名前にしてみた。

using System;
using System.IO;
using System.Windows.Forms;

class ccp {
  [STAThread]
  static void Main(string[] args){
    string path=System.Environment.CurrentDirectory;
    string filename = "";
    if(args.Length ==0 ){
      filename = path;
    }else{
      filename = path + "\\" + args[0];
    }
    if (!File.Exists(filename) && !Directory.Exists(filename)){
      Console.WriteLine("ccp: " + filename + " is not found.");
      return;
    }
    Clipboard.SetDataObject(filename,true); 
    Console.WriteLine("\""+filename+"\" is copied to clipboard.");
  } 
}

使い方はこんな感じ。引数を省略するとカレントディレクトリをコピーする。

$ ccp
"C:\cygwin\home\username" is copied to clipboard.
$ ccp test.txt
"C:\cygwin\home\username\test.txt" is copied to clipboard.

クリップボードにデータをコピーするメソッドはClipboard.SetDataObject。これを使うには「using System.Windows.Forms;」を宣言した上で、main関数に[STAThread]の指定も必要。

コピーしたデータをアプリケーション終了時まで残すためには、第二引数に trueを指定する。