プログラム系統備忘録ブログ

記事中のコードは自己責任の下でご自由にどうぞ。

Directory.EnumerateFilesでハマった話

指定ディレクトリ以下の指定拡張子の列挙に便利な System.IO.Directory.EnumerateFiles メソッド。
しかし、searchPattern引数に指定していない拡張子も列挙される場合があります。

2015/11/10追記: MSDN日本語版に改めてアクセスしてみると、解説中の「メモ」の欄にて、この記事で紹介している内容が記載されていました。(ただしラジオボタンの訳文を選択していてもその辺りは英語オンリーです。機械翻訳とは一体。)
というわけで、この記事の存在意義は非常に怪しくなりました。

続きを読む

Livetでウィンドウが閉じられるときに確認ダイアログを出し、その応答で別の処理をしたりキャンセルしたりする方法

サンプルコードは最後に載せています。
2015/05/17 サンプルコードをコールバックを使用しない内容に差し替え。

確認環境

  • Visual Studio: Community 2013
  • Livet: 1.2.0
  • プロジェクトの対象のフレームワーク: .NET Framework 4.5
  • PCにインストールしているフレームワーク: .NET Framework 4.5.51209

背景

notepad.exeにて、テキストを編集した状態でウィンドウを閉じようとすると確認ダイアログが表示される。
確認ダイアログの結果によって、ウィンドウを閉じることがキャンセルされたり、閉じる前に別の操作(ここではファイルの保存)が行われる。
同じことをLivetを使ったWPFアプリケーションでも行いたい。

続きを読む

読み取り不可なStreamの作り方

背景

  • 某ファイルフォーマット用のBinaryReaderクラスを作った。
  • コンストラクタで受けるStreamがunreadableならArgumentExceptionを投げている。
  • これの単体テストを書きたい。

実現方法

Stream.CanRead プロパティ (System.IO) | Microsoft LearnはClose後ならfalseを返すので、それを利用する。

続きを読む

KeySnailのHoKで候補が1つの場合でもヒントを表示させ、自動では開かせない

http://lab.designsatellites.jp/?p=1173を見て、HoKを導入してみました。
(現時点ではバージョンは 1.2.7 (2011 01/01) です。)

少し試してみたところ、「eなどのKeyDown時、URLの候補が1つの場合はヒントを表示せず自動で開く」ようになっていました。
誤爆が怖いので、候補が1つの場合でもヒントを表示するようにしました。

おもむろにhok.ks.jsを開き、1240行目辺りを見ます。

if (hintCount > 1)
{
    document.addEventListener('keydown', stopEventPropagation, true);
    document.addEventListener('keypress', onKeyPress, true);
    document.addEventListener('keyup', stopEventPropagation, true);
}

ifの条件を `hintCount >= 1` に変更すれば完了です。

TreeViewのControlTemplateにScrollViewerを入れたらUIの仮想化が動かなかった話とその対処法

2015/04/13追記 Win7 64bitマシンで、プロジェクトの対象のフレームワークを.Net4.5として、マシンには.Net4.5.2をインストールした状態で、仮想化したTreeViewの要素をExpandしたときにスクロール位置が狂う(Expandした要素やその子供が範囲外に隠れる)現象を確認しています。 恐らく https://connect.microsoft.com/VisualStudio/feedback/details/783812/c-wpf-treeview-virtualized-issue-with-treeview-scrolling-on-item-expanded と同様の現象です。

2015/05/24追記 スクロールバーをマウス操作している時に、UIが完全にフリーズする現象が発生しました。https://connect.microsoft.com/VisualStudio/feedback/details/790241/mousescrooll-freezes-virtualizingpanel-if-isvirtualizingwhengrouping-and-scrollunit-pixel-set で言及されているように、`VirtualizingPanel.ScrollUnit="Item"`と指定したところ、今のところは再発していません。

続きを読む

Emacsで開いているバッファのファイルを選択した状態でExplorerを開く

しばしば、Emacsで開いているバッファのファイルをExplorerで開きたくなります。
というより、ディレクトリのショートカット作ってそれにアクセスするよりも、recentf+anythingでファイルを開いてコマンド打ったほうが手早く幅広く出来そうです。

この記事ではその動作をするEmacsLispを紹介します。
この記事に記載したコードは、gnupackのEmacsにてWindowsXP及びWindows7で確認しました。
なお、この記事では文字コードの取り扱いは省略しています。変換が必要な場合はencode-coding-stringをご利用ください。

続きを読む

TopCoderで使用する言語をC++からC#に替えた時のメモ

背景

以前、TopCoderで使用するコンパイラのバージョンが上がりました。
http://apps.topcoder.com/forums/?module=Thread&threadID=792643で通知があり、実際のSRMで適用されたのは7/19からだったようです(https://twitter.com/rng_58/status/358179775543644160)。

この更新で、C#及びVBではコンパイラのバージョンが.NET Framework4.0になりました。
私は今まで競技プログラミングではC++を使っていましたが、次の理由からC#に替えてみることにしました。

  • AOJやっている内にC++のSTLやの使い方を覚えたので、C#のコレクション関連もやってるうちに覚えられるだろう
  • LINQでコレクションの操作が簡単に行える、begin()とend()の対を何度も書かずに済む
  • C++だとテンプレの先頭に大量のinclude文(人によっては更にtypedefやマクロ)が必要になるがC#だと数個のusingで済む

単純にC#を触っていたい、というのが本音です。

続きを読む