やる気駆動型エンジニアの備忘録

WPF(XAML+C#)の話題を中心に.NET/Android/CI やたまに趣味に関するブログです

フォルダ内にあるMedia の再生時間を取得する(C#/WindowsAPICodePack)

特定のフォルダ内にあるメディア(MP3とかAVIとか)ファイルの再生時間を取得する方法のメモ

動作環境

WindowsAPICodePack は、以下の方法でインストールします。 www.nuget.org

以下、サンプルです。

var files = Directory.GetFiles(@"C:\work\");
foreach (var file in files)
{
    using (var shell = ShellObject.FromParsingName(file))
    {
        var property = shell.Properties.System.Media.Duration;
        if (property?.ValueAsObject != null)
        {
            var time = (ulong)property.ValueAsObject;
            Console.WriteLine($"{Path.GetFileName(file)} 再生時間[{TimeSpan.FromTicks((long)time)}]");
        }
        else
        {
            Console.WriteLine($"{Path.GetFileName(file)} 該当プロパティなし。");
        }
    }
}

ShellObject.FromParsingName でファイルの情報を取得し、Properties.System.Media.Duration で該当プロパティの値を取得します。 注意しなければならないのは、ファイルに再生時間(Duration)プロパティが無い場合は、Properties.System.Media.Duration がnull になります。 また、ファイルが破損していたりして再生時間が記録されていない場合は、Properties.System.Media.Duration.ValueAsObject がnull になります。

JR回数券と定期券の併用方法について

たまに使用する電車の乗車回数券ですが、定期券との併用方法をよく忘れるのでメモ

この記事で紹介する内容はJR西日本大阪環状線JR神戸線)でのみ使用可能であることを確認しています。
全ての線区・区間が同じ仕組みかどうかはわかりませんのでご注意ください。
※この記事は2017年7月時点のものです。

回数券はJRの券売機で購入することができる乗車券です。
詳細については以下のページを確認してください。

faq.jr-odekake.net

通常、定期券は以下の様に複数の駅間で使用していると思います。
f:id:iyemon018:20170720165411p:plain


ここで例えばB駅で乗り換えてD駅まで定期的に移動することになった場合、回数券を使用すると少し交通費を節約することができます。
f:id:iyemon018:20170720165646p:plain

イメージとしてはこんなところでしょうか。
この②の区間の回数券を購入し、通常使用している①区間の定期券と合わせて使用することが可能です。
ただし、行き(上記A駅からD駅へのルート)と帰り(上記D駅からA駅へのルート)で手順が異なるので注意してください。

■行き

1.A駅で定期券を使って乗車する。
2.D駅まで乗車する。
3.D駅の精算機でカード挿入口に"定期券"→"回数券"の順番に挿入する。
  この時、定期券にチャージ済みであってもこの方法を使用することはできます。
  ただし、支払い不要のメッセージが表示されるので素早く回数券を投入してください。
4.出場証が発行されるので通常の切符と同じように使用する。

■帰り

1.D駅で回数券を使用して乗車する。
2.A駅まで乗車する。
3.A駅の精算機でカード挿入口に"回数券"→"定期券"の順番に挿入する。
4.出場性が発行されるので通常の切符と同じように使用する。

乗車するときと生産する際の手順が異なります。
特に乗車する際は手順を間違えると回数券で支払いすることができなくなるので注意してください。

Jenkins でxUnit + OpenCover を使ったカバレッジ集計・レポート表示方法について

少し前にJenkins でxUnit を使ったユニットテストの実行方法を試しました。
iyemon018.hatenablog.com

今回は、Jenkins でxUnit でユニットテストを実行し、OpenCover を使ってカバレッジを集計・プロジェクトページに表示する方法についてメモします。

続きを読む

TFS でTF14061 が表示されたときの対処方法

TFS 使っているときにTF14061 なるエラーメッセージが表示されたときの事象と対処方法メモです。

現象

Visual Studio でTFS と接続しているときに、チーム エクスプローラー上に"予期しないファイルの終わりを検出しました。"というメッセージが表示される。
この状態でチェックインしても同じメッセージが表示されてしまい、チェックインすることができない。
ソース管理エクスプローラーを表示しようとするとマップが解除されてしまっていて表示されない。
このときに"TF14061" メッセージが表示される。

原因

TFS のキャッシュにゴミデータが含まれてしまっているため。
異なるバージョンのTFS に接続してOS を再起動したときに発生したので、TFS バージョンの混在が原因かも?

対処方法

一度Visual Studio を終了して"%USERPROFILE%\AppData\Local\Microsoft\Team Foundation\6.0" にある"Cache" フォルダを削除する。
Visual Studio を再起動するとチェックイン出来るようになる。

WPF でVisualTree のヒット テストを実行する

VisualTreeHelper を使用すると特定のコントロールのVisualTree 要素を検索したりできることは知っていたのですが、今まで使用する機会は殆どありませんでした。
今回使用したときに躓いた箇所も含めて、その使用方法をメモします。

以下、動作環境です。

VisualTreeHelper とは

WPF (と言うかXAML) には"LogicalTree" と"VisualTree" の2種類の要素ツリーが存在します。

  • LogicalTree は、論理ツリー つまりXAML で定義した内容で表されるツリーです。
  • VisualTree は、テンプレートなどの内容も含めた、その名の通りビジュアライズされた要素のツリーです。

"VisualTreeHelper" は、このVisualTree 上の要素を検索したりヒット テストを実施するためのヘルパー クラスです。

続きを読む