3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

.Net開発

(.Net)ジェネリックデリゲート(汎用デリゲート)を使ってみた

(.Net)デリゲートを自作するメリットがようやく分かってきたで、デリゲートの使い方を書きました。 しかし、delegate型の変数を定義しないといけません。 それを簡略化できる定義済みデリゲート(ジェネリックデリゲート)型というものが.Net Framework2.0以降…

(.Net)デリゲートを自作するメリットがようやく分かってきた

今まで、例えばジェネリック型のListクラスのFindメソッドなどの述語として用いる部分でしかデリゲートは使っていませんでした。(それらも主に匿名メソッドを使ってきました。匿名メソッドを使った例は、(vb.net)VB.NetではList.Findとかのデリゲートの実装…

(.Net)改行無しの全銀フォーマットを可読化する

全銀ファイルフォーマットを扱うことになったんですが、銀行側からくる口座振替のファイルをみて驚きました。 各レコードを区別する改行が無いのです。 全銀フォーマットが固定長なのは知ってましたが、改行が無いのは見づらいです。 ということで改行無の全…

(.Net)SaveFileDialogで保存したファイルに拡張子がつかない

ファイルの保存ダイアログを SaveFileDialog で実装しようとしてました。 SaveFileDialog の AddExtension プロパティを true にすると現在のフィルタで選んでいる拡張子が自動的に付きます。 (デフォルトでAddExtensionはtrueです) しかし、なぜか拡張子が…

(.Net)オブジェクトのメンバ情報とメンバの値を動的に取得する

オブジェクト指向だと値を格納する目的のクラスってよく使います。(例えば、社員クラスとか...) で、それらのデータ格納用クラスのメンバ変数を一気に出力するのを汎用的にするというのが今回の目的です。 例えば下記のようなクラスがあるとします。 public …

(.Net)List<string>で一気に文字列の連結をしたい

Listで、それぞれの要素の文字列を結合して一つの文字列にしたいという場合の方法です。 ループで回して結合してもいいんですが、それだとコードが長くなるので、LINQString.Join()を使ってみました。 下記のような感じです。(C#) List str = new List{ "あ…

(.Net)objectがList<T>かまたは配列かどうか判定する

配列変数やジェネリックコレクション(List)をobjectにしてしまった時に、Listか配列か判定する方法です。 配列かどうかを判断にするにはオブジェクトの GetType().IsArray で可能なようです。 型指定なしのジェネリックコレクション(List<>)かどうかを判定す…

(.Net)メッセージボックスを最前面に表示したい

現在 BackgroundWorker コンポーネントを使ったマルチスレッドアプリケーションを使ってます。 メインスレッドはフォームのUIを表示し、別スレッドで動くBackgroundWorker.DoWorkイベントハンドラで時間のかかる処理をしています。 この別スレッド側でメッセ…

(.Net)File.Create(ファイル名)でファイルを作成したら必ずCloseしよう

.Net で File.Create() メソッドを使うと簡単にファイルの作成ができます。 しかし、上記MSDNにあるように、元のファイルのハンドルが閉じられるまで、作成されたファイルに他のプロセスやコードからアクセスすることはできないので、ハンドルを閉じてやる必…

(.Net)Windows共有フォルダのセッションの切断する

.Net アプリケーションからWindows共有フォルダのセッションを切断する方法です。 GUIだと、コンピュータの管理 から 共有フォルダ→セッション→セッション右クリック→セッションを閉じる ということを .Net アプリケーションからしたいわけです。 コマンドプ…

(.Net)共有フォルダにアクセスしているセッションを取得する

Windows共有フォルダにアクセスしているセッション情報を .NET アプリケーションから取得する方法です。 クライアントPCから実行し、共有フォルダを提供しているサーバPCのセッションを取得します。 コマンドでするなら、net session で取得することができま…

(.Net)特定のターミナルサーバ上のユーザにメッセージを送信する

.Netアプリケーションから任意のWindowsユーザにメッセージを送信する方法です。 他のコンピュータやターミナルサービス利用中のユーザにメッセージを送信するには msg コマンドが使えます。 (学生時代 net send というコマンドで他のWindowsPCにメッセージ…

(.Net)LINQでラムダ式を動的に生成する

(.Net)LINQのクエリ構文とメソッド構文(ラムダ式)を使ってみた で LINQ で動的なクエリを生成する方法がわからんと言っていましたが、いろいろ参考サイトを巡回した結果、よーやく動的クエリをある程度なら処理できる仕組みを作ることができました。 任意の…

(.Net)LINQのクエリ構文とメソッド構文(ラムダ式)を使ってみた

.Net Framework 3.5(C#3.0)から追加されたLINQですが、ようやく使ってみることにしました。 SQLServer等のDBへの問い合わせに使えるようですが、今回はコレクションでの検索がメインです。 とりあえず基本的なことは、@IT:LINQ(リンク)の基礎知識と、VB は…

(.Net)WindowsAPIのエラーコードからメッセージを取得する

.NET から WindowsAPI(Win32API) を呼び出した場合大抵の Win32API は戻り値としてエラーコードを返します。 このエラーコードはWin32 エラー コードと呼ばれてるようですが、System.ComponentModel.Win32Exception クラスの Message メソッドを使うとエラー…

(.Net)C#3.0からオブジェクトのコレクションの初期化が簡潔に書けるようになってた

C#3.0(.Net Framwork3.5)からオブジェクトの初期化が簡単に書けるようになってたようです。 以前(C#2.0)はこのように書いてました。 public class TestClass{ public string Name { get; set; } public int Id { get; set; } } private void button1_Click(o…

(.Net)アプリ上で共有フォルダの認証を行いファイルアクセスをする

ドメインに参加してないPC上で動く.Netアプリケーションから、ドメイン内のファイルサーバにアクセスしたいと言う要件です。 当然.Netアプリケーション内で共有フォルダの認証を行わなくてはなりません。 で、調べるとプログラム上で認証情報(アカウントとパ…

.Net(C#)アプリからExcelのVBAを呼び出したい(遅延バインディング)

.NetアプリからExcelのVBAを呼び出したい(事前バインディング) で参照設定からCOMのOffice操作DLLを呼び出す方法を書きました。(あらかじめ呼び出すオブジェクトのタイプライブラリを参照してコンパイル時に型チェックをするこの方法を事前バインディングと…

.Net(C#)アプリからExcelのVBAを呼び出したい(事前バインディング)

.NetアプリケーションからExcel2007のVBA(マクロ)標準モジュール内のサブプロシージャを呼び出す方法です。 まず、参照設定で、COMの Microsoft Excel 12.0 Object Library を追加します。 (12.0とかはExcelのバージョンで変わってきます。) そして、下記の…

(.Net).NetアプリケーションからAccess(MDB)のテーブルをExcelファイルにエクスポート

Accessにはテーブルを各種形式にファイルにエクスポートできる機能があります。 (テーブル選択し、ファイルメニュー→エクスポートのことです。) さて、これを .Net のアプリケーションからAccessを起動しなくてもExcelファイル(xls)にエクスポートしてやろう…

(.Net)DotNetZipでZIPファイルを作る時の注意

(.Net)MemoryStreamのデータをGZipStreamで圧縮するときの注意点..で、.Netは標準のクラスで、GZIP(.gz)が作れることを書きましたが、Windowsではあまり使われていない形式なのでちょっと不便です。 ところが、DotNetZipというライブラリを使えば非常に簡単…

(.Net)アカウトを指定してProcess.Startを使うときはWorkingDirectoryプロパティを指定しないといけない

共有フォルダ上で動く.Net WindowsFormアプリ(仮にapp1)を作成しています。 その共有フォルダから、別のサーバ上の共有フォルダ上の.Netコンソールアプリ(仮にapp2)をキックし、その.Netアプリから管理者ユーザ権限でバッチ(bat1)を起動させるというカラクリ…

(.Net,ADSI)識別名(DN)のエスケープ

ActiveDirectoryというかLDAPの仕様だと思うんですが、重複した識別名(DN)のオブジェクトは作成できません。 で、.Netから新規ActiveDirectoryユーザを作成するツールを作ったんですが、DNの重複チェックができていませんでした。(ログインアカウント名の重…

(.Net)別ユーザでプロセスを起動する

C++ で Windows API を使って別のユーザでアプリケーションを書く方法は、(C++)別ユーザでプロセスを起動するで書きました。 今回は .Net でそれを実現する方法です。 基本的には、ProcessStartInfo. Domain , ProcessStartInfo.UserName , ProcessStartInfo…

(.Net)コマンドライン引数を取得する方法

コマンドライン引数の取得ですが大きく二つあるようです。 1.Environmentクラスを使う方法 Environment.CommandLine プロパティに自身のパスも含めたコマンドライン引数全体が格納されているようです。 ただこれだと使い辛いので普通は Environment.GetComma…

(.Net)アプリケーションの終了コードを返す方法、取得する方法

.Net のコンソールアプリケーションでOSに終了コードを返す方法です。 いくつか有るようですが、一番オーソドックスなのはエントリポイントであるMainメソッドの戻り値を指定する方法です。 ただ、Visual Studio で新規にコンソールアプリケーションのProjec…

(.Net)数値型を書式指定子を使って3桁区切りで出力する

今まで int.ToString("###,###,###,##0#) 的な出力をしてたんですが、標準数値書式指定文字列を使うともっと楽にできるようです。 一応標準数値書式指定文字列の "N" を使うと3桁区切りで出ることは知ってたんですが、小数点以下2桁まで出力されるのが問題で…

(.Net,OpenOffice).NetからCalcの行の挿入、削除を行う

(.NetからOpenOfficeを操作する方法は(.Net,OpenOffice).Net から OpenOffice ドキュメントを操作するを参照。OpenOfficeは3.2です。) Calc操作時に、行を挿入、削除する方法です。 OpenOffice SDKのサンプルにやりたいことが書いていました。 サンプルは、O…

(.Net)UDPの送受信テストツール

連続したUDPパケットが送信側と受信側でちゃんとやり取りされているかを確認したいと思ってツールを探してみたんですが、いいものが無かったのでちょっと.Net Framework で自作してみました。 とりあえず急ぎでパケットの送受信さえ確認できればいいというも…

(.Net)long→object→intへのキャスト時の注意

DataTable.Compute("SUM(clm1)") を使って、DataTableの集計値を求めたいと思ってました。 (DataTableのclm1列は int 型です。DataTable.Computeについては、(.Net)DataTableで特定の列の値を集計する参照。) で下記のようなコードにすると InvalidCastExcep…