<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>.NET＆SQLServer関連</title><link>http://blogs.wankuma.com/kiyochan/category/1088.aspx</link><description>.NET＆SQLServer関連</description><managingEditor>キヨ@わんくま</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>キヨ@わんくま</dc:creator><title>カスタム例外は、System.Exception クラスから派生するのだ！</title><link>http://blogs.wankuma.com/kiyochan/archive/2008/08/19/153544.aspx</link><pubDate>Tue, 19 Aug 2008 22:14:00 GMT</pubDate><guid>http://blogs.wankuma.com/kiyochan/archive/2008/08/19/153544.aspx</guid><wfw:comment>http://blogs.wankuma.com/kiyochan/comments/153544.aspx</wfw:comment><comments>http://blogs.wankuma.com/kiyochan/archive/2008/08/19/153544.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kiyochan/comments/commentRss/153544.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kiyochan/services/trackbacks/153544.aspx</trackback:ping><description>&lt;P&gt;バカボンのパパ風のタイトルで書いてみました～&lt;BR&gt;（特に意味はないですっっっっ）&lt;/P&gt;
&lt;P&gt;以前は「System.ApplicationException クラスから派生しなさい」とあちらこちらで言われていたのですが、&lt;BR&gt;&lt;A href="http://msdn.microsoft.com/ja-jp/library/ms229007.aspx"&gt;http://msdn.microsoft.com/ja-jp/library/ms229007.aspx&lt;/A&gt;&lt;BR&gt;を読むと、System.Exceptionから派生してくださいねってことが書かれています。&lt;/P&gt;
&lt;P&gt;マイクロソフトさんの中でも方針が変わったのでしょうか。&lt;/P&gt;
&lt;P&gt;今後作るカスタム例外クラスは、System.Exceptionから派生させようかな・・・とちょっと迷ったりしています(笑)&lt;/P&gt;
&lt;P&gt;みなさんは、やはりSystem.Exceptionから派生するほうを選ばれているのでしょうか？&lt;BR&gt;ちょっと気になりました (^-^)v&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/kiyochan/aggbug/153544.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>キヨ@わんくま</dc:creator><title>gzip形式で圧縮/解凍するプログラム</title><link>http://blogs.wankuma.com/kiyochan/archive/2008/08/14/153028.aspx</link><pubDate>Thu, 14 Aug 2008 21:48:00 GMT</pubDate><guid>http://blogs.wankuma.com/kiyochan/archive/2008/08/14/153028.aspx</guid><wfw:comment>http://blogs.wankuma.com/kiyochan/comments/153028.aspx</wfw:comment><comments>http://blogs.wankuma.com/kiyochan/archive/2008/08/14/153028.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kiyochan/comments/commentRss/153028.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kiyochan/services/trackbacks/153028.aspx</trackback:ping><description>&lt;P&gt;必要に迫られ、gzip形式でファイルを圧縮解凍するクラスライブラリを作りました。&lt;BR&gt;他の方にとっても参考になるかもしれないので、このページにも貼り付けておきます。&lt;BR&gt;何か突っ込みどころがあれば(汗)、お気軽に f(^_^)&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;（注意）&lt;BR&gt;●基本的なロジックのみで構成されており、実用上必要な例外処理が抜けている可能性があります。必要な場合は、お手数ですがご自身でMSDNなどでお調べください。&lt;BR&gt;●下記プログラムは、ご自由に転載していただいてかまいません。ご自身が運営されているプログラミング関連サイトに転載していただいてもかまいません。事前の承諾は特に不要です。引用元を書いていただけると嬉しいですが、必須ではありません。&lt;BR&gt;●下記プログラムの使用は、すべてご自身の責任においてご利用ください。筆者はその責任を負わないものとします。&lt;BR&gt;●その他、お気づきの点があれば、コメント欄にお書きください。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; /// &amp;lt;summary&amp;gt;&lt;BR&gt;&amp;nbsp; /// gzip形式の圧縮と解凍を行うためのクラス&lt;BR&gt;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;BR&gt;&amp;nbsp; public class GZipCompressController {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// 圧縮または解凍の際にストリームから一度に読み込むバイト数&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int BufferSize = 4096;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// 入力ストリームから読み出したデータに対してgzip圧縮を実行し、結果を出力ストリームへ送る&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="inFileStream"&amp;gt;入力ストリーム&amp;lt;/param&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="outFileStream"&amp;gt;出力ストリーム&amp;lt;/param&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void Compress(FileStream inFileStream, FileStream outFileStream) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; byte[] buffer;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 入力ストリームから圧縮前の内容を読み出し、圧縮処理を行いながら、&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 圧縮後のデータをバイト配列bufferに書き込む&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; using (GZipStream gzStream = new GZipStream(outFileStream, CompressionMode.Compress)) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (true) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; buffer = new byte[this.BufferSize];&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 読み出し&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int readSize = inFileStream.Read(buffer, 0, buffer.Length);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (readSize == 0) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ストリームのデータを最後まで読みだした&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 書き込み&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gzStream.Write(buffer, 0, readSize);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// ファイルに対してgzip圧縮を実行し、圧縮後のファイルを指定のパスに保存する&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="inFilePath"&amp;gt;圧縮対象ファイルが存在するファイルパス&amp;lt;/param&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="outFilePath"&amp;gt;gzip圧縮されたファイルの保存先パス&amp;lt;/param&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void Compress(string inFilePath, string outFilePath) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileStream inFs, outFs;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ファイルからストリームを生成し、同名のメソッドを実行する&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; using (inFs = new FileStream(inFilePath, FileMode.Open, FileAccess.Read)) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; using (outFs = new FileStream(outFilePath, FileMode.Create, FileAccess.Write)) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.Compress(inFs, outFs);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// 入力ストリームからgzip圧縮されたデータを読みだして解凍処理を実行し、解凍後のデータを出力ストリームへ送る&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="inFileStream"&amp;gt;入力ストリーム。このストリームはSeek処理をサポートしている必要がある&amp;lt;/param&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="outFileStream"&amp;gt;出力ストリーム&amp;lt;/param&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void Decompress(FileStream inFileStream, FileStream outFileStream) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; byte[] buffer;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int decompressionSize; // 解凍後のバイト数（圧縮元だったデータのバイト数）&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; using (GZipStream gZipStream = new GZipStream(inFileStream, CompressionMode.Decompress)) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //*********************************************************************&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // GZIP形式圧縮データの末尾４バイトに、圧縮元データのバイト数が&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 格納されているため、その数値を取得する&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //*********************************************************************&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; byte[] tail4bytes = new byte[4];&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int position = Convert.ToInt32(inFileStream.Length - 4);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inFileStream.Position = position;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inFileStream.Read(tail4bytes, 0, 4);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inFileStream.Position = 0;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; decompressionSize = BitConverter.ToInt32(tail4bytes, 0);&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //*********************************************************************&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // GZIP形式圧縮データをストリーム経由で、BytesSizeバイトずつ読みだす。&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 読みだしたデータに対して解凍処理を行い、解凍後のバイトデータをbufferに格納する。&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //*********************************************************************&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 読み出し処理の関係上、ちょっと余分にサイズが大きめの配列を用意する&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; buffer = new byte[decompressionSize + this.BufferSize]; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int readOffset = 0;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (true) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int readSize = gZipStream.Read(buffer, readOffset, this.BufferSize);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (readSize == 0) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; readOffset += readSize;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } // end of using&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 解凍したデータを、出力ストリームに送る&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; outFileStream.Write(buffer, 0, decompressionSize);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; outFileStream.Flush();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// gzip圧縮形式のファイルに対して解凍処理を実行し、解凍後のファイルをディスクに保存する&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="inFilePath"&amp;gt;gzip圧縮されたファイルのパス&amp;lt;/param&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="outFilePath"&amp;gt;解凍後のファイルを保存するパス&amp;lt;/param&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void Decompress(string inFilePath, string outFilePath) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileStream inFs, outFs;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; using (inFs = new FileStream(inFilePath, FileMode.Open, FileAccess.Read)) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; using (outFs = new FileStream(outFilePath, FileMode.Create, FileAccess.Write)) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.Decompress(inFs, outFs);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp; }// end of class&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;実行例：&lt;BR&gt;GZipCompressController x = new GZipCompressController();&lt;BR&gt;//x.BufferSize = 409600;&amp;nbsp; // バッファサイズを変更したければここで変更&lt;BR&gt;x.Compress(@"C:\hoge.bmp", @"C:\hoge.bmp.gz"); // 圧縮処理&lt;BR&gt;x.Decompress(@"C:\hoge.bmp.gz", @"C:\hoge.bmp"); // 解凍処理&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/kiyochan/aggbug/153028.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>キヨ@わんくま</dc:creator><title>コレクションクラスをスレッドセーフに扱う方法</title><link>http://blogs.wankuma.com/kiyochan/archive/2008/08/03/151578.aspx</link><pubDate>Sun, 03 Aug 2008 15:22:00 GMT</pubDate><guid>http://blogs.wankuma.com/kiyochan/archive/2008/08/03/151578.aspx</guid><wfw:comment>http://blogs.wankuma.com/kiyochan/comments/151578.aspx</wfw:comment><comments>http://blogs.wankuma.com/kiyochan/archive/2008/08/03/151578.aspx#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kiyochan/comments/commentRss/151578.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kiyochan/services/trackbacks/151578.aspx</trackback:ping><description>&lt;P&gt;ただ今、MCTS資格を取るべく、まずは.NET 2.0のMCP試験（70-536）に向けて勉強していまっす。&lt;BR&gt;.NET 2.0の復習ってつもりで進めていこうと思ってましたが、意外と知らなかったこともたくさんあって、復習どころでなくなりました(汗)&lt;/P&gt;
&lt;P&gt;.NETの世界は広いな～&lt;/P&gt;
&lt;P&gt;そのうちの一つが、コレクションクラスをスレッドセーフに扱うという方法です。&lt;BR&gt;「んなことも知らんかったのか！」って言われそうですが(汗)、自分でも大切なことを学んでなかったんだな～と気付かされました&lt;BR&gt;(&amp;#180;･ω･)&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;コレクションクラスのSymcRootプロパティや、Synchronizedメソッドを用いることで、スレッドセーフな処理を行うことができるとのことです。&lt;BR&gt;以下、例。&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;ArrayList myCollection = new ArrayList();&lt;BR&gt;&amp;nbsp; lock(myCollection.SyncRoot) {&lt;BR&gt;&amp;nbsp; foreach (Object item in myCollection) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;hogehoge&lt;BR&gt;&amp;nbsp; }&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;ArrayList myAL = new ArrayList();&lt;BR&gt;ArrayList mySyncdAL = ArrayList.Synchronized( myAL );&lt;BR&gt;foreach (Object item in mySyncdAL) {&lt;BR&gt;&amp;nbsp; // hogehoge&lt;BR&gt;}&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/kiyochan/aggbug/151578.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>キヨ@わんくま</dc:creator><title>ASP.NET MVC</title><link>http://blogs.wankuma.com/kiyochan/archive/2008/07/31/151258.aspx</link><pubDate>Thu, 31 Jul 2008 11:43:00 GMT</pubDate><guid>http://blogs.wankuma.com/kiyochan/archive/2008/07/31/151258.aspx</guid><wfw:comment>http://blogs.wankuma.com/kiyochan/comments/151258.aspx</wfw:comment><comments>http://blogs.wankuma.com/kiyochan/archive/2008/07/31/151258.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kiyochan/comments/commentRss/151258.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kiyochan/services/trackbacks/151258.aspx</trackback:ping><description>&lt;P&gt;「ASP.NET MVC」というのが、近いうちにリリースされるようですね。&lt;BR&gt;下記のサイトで多少詳しく書かれていたので、ざっと読みました。&lt;/P&gt;
&lt;P&gt;もう一つのASP.NET 「ASP.NET MVC」を知る（前編）&lt;BR&gt;&lt;A href="http://codezine.jp/a/article/aid/2748.aspx"&gt;http://codezine.jp/a/article/aid/2748.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;そういえば、4年ほど前だったでしょうか、Java関連の書籍や解説サイトで「MVC」という単語がブームのように使われていました。Web開発者の多くが「私どもはMVCを意識し、クオリティの高い開発を意識しております」みたいなことを言っていたなあと、記憶しています。&lt;/P&gt;
&lt;P&gt;私自身、現在のASP.NETでは、&lt;BR&gt;・アプリケーションで扱ういわゆる「データ」にあたるものをM&lt;BR&gt;・UIにあたるaspxファイルがV&lt;BR&gt;・それ以外のロジックめいたものがC。ww&lt;BR&gt;みたいに超ざっくりとイメージしていましたが、そのあたりはもう少し厳格に(という表現は適切かな??)扱われるのでしょうか。&lt;/P&gt;
&lt;P&gt;ASP.NET MVCは、従来のASP.NETと異なる概念が多く含まれてるということです。&lt;BR&gt;リリースされる頃には、アーキテクチャなどを理解していこうかなと、思ってますです。&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/kiyochan/aggbug/151258.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>キヨ@わんくま</dc:creator><title>Windows Mobile 上でも Silverlight</title><link>http://blogs.wankuma.com/kiyochan/archive/2008/04/03/131412.aspx</link><pubDate>Thu, 03 Apr 2008 11:02:00 GMT</pubDate><guid>http://blogs.wankuma.com/kiyochan/archive/2008/04/03/131412.aspx</guid><wfw:comment>http://blogs.wankuma.com/kiyochan/comments/131412.aspx</wfw:comment><comments>http://blogs.wankuma.com/kiyochan/archive/2008/04/03/131412.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kiyochan/comments/commentRss/131412.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kiyochan/services/trackbacks/131412.aspx</trackback:ping><description>&lt;P&gt;MS「Windows Mobile 6.1」発表――IEにFlashとSilverlight搭載&lt;BR&gt;&lt;A href="http://www.itmedia.co.jp/news/articles/0804/02/news011.html"&gt;http://www.itmedia.co.jp/news/articles/0804/02/news011.html&lt;/A&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;携帯端末でも、Silverlightが搭載されるようですね。ちょっと期待しています。&lt;BR&gt;早くSilverlightのお勉強もしたいところですが、なかなか・・・(汗)&lt;/P&gt;
&lt;P&gt;携帯のiアプリを作っていた3年前を、ちょっと懐かしく思い出しました～&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/kiyochan/aggbug/131412.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>キヨ@わんくま</dc:creator><title>今日から私もVisual Studio 2008！</title><link>http://blogs.wankuma.com/kiyochan/archive/2008/03/21/128866.aspx</link><pubDate>Fri, 21 Mar 2008 09:50:00 GMT</pubDate><guid>http://blogs.wankuma.com/kiyochan/archive/2008/03/21/128866.aspx</guid><wfw:comment>http://blogs.wankuma.com/kiyochan/comments/128866.aspx</wfw:comment><comments>http://blogs.wankuma.com/kiyochan/archive/2008/03/21/128866.aspx#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kiyochan/comments/commentRss/128866.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kiyochan/services/trackbacks/128866.aspx</trackback:ping><description>&lt;P&gt;「今日から」というタイトルですが、実は昨日からVS2008の環境で開発をはじめることになりました。&lt;BR&gt;(^o^)&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;プロジェクトを開くと、&lt;FONT color=#ff0000&gt;変換ウィザード&lt;/FONT&gt;がでますよね。&lt;BR&gt;VS2005で開発したプロジェクトをVS2008で開くとき、最初に2008形式(?)に変換する作業が必要になります。&lt;BR&gt;開発ソフトをバージョンアップしない限り、見ることのできない瞬間です。&lt;/P&gt;
&lt;P&gt;プロジェクトは無事に2008形式へ変換できましたが、この変換の瞬間は、新しい世界へ旅立つんだ！みたいなウキウキ感があるのと同時に、VS2005のソフトを見捨ててしまったんだという寂しさもありますね(ちょい大げさ！？)&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;そんなこんなですが、今日からめでたく2008です。&lt;BR&gt;はやく&lt;FONT color=#ff0000&gt;LINQや.NET AJAXの勉強&lt;/FONT&gt;もしていきたいと思います。&lt;BR&gt;(^o^)&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/kiyochan/aggbug/128866.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>キヨ（kiyochan@wankuma.com）</dc:creator><title>POPbeforeSMTPを採用＆25番ポートをふさいでるメールサーバからメールを送る</title><link>http://blogs.wankuma.com/kiyochan/archive/2007/03/12/66313.aspx</link><pubDate>Mon, 12 Mar 2007 21:04:00 GMT</pubDate><guid>http://blogs.wankuma.com/kiyochan/archive/2007/03/12/66313.aspx</guid><wfw:comment>http://blogs.wankuma.com/kiyochan/comments/66313.aspx</wfw:comment><comments>http://blogs.wankuma.com/kiyochan/archive/2007/03/12/66313.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kiyochan/comments/commentRss/66313.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kiyochan/services/trackbacks/66313.aspx</trackback:ping><description>&lt;P&gt;当ブログ始まって以来の、.NETネタでございます m(_ _)m&lt;/P&gt;
&lt;P&gt;.NETでは、次のようなコードで、メールを送信することができます。&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT color=#006400&gt;//*******************************************************&lt;BR&gt;// メールオブジェクトの作成&lt;BR&gt;//*******************************************************&lt;/FONT&gt;&lt;BR&gt;MailMessage mail = new MailMessage();&lt;BR&gt;mail.From = "送信元メールアドレス";&lt;BR&gt;mail.To = "あて先メールアドレス";&lt;BR&gt;mail.Subject = "メール件名";&lt;BR&gt;mail.Body = "メール本文";&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#006400&gt;//*******************************************************&lt;BR&gt;// メール送信実行&lt;BR&gt;//*******************************************************&lt;/FONT&gt;&lt;BR&gt;SmtpMail.SmtpServer = "メール送信サーバー名またはIPアドレス";&lt;BR&gt;SmtpMail.Send(mail);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;このコードでメール送信を実行できるのですが、セキュリティにうるさくなった現在においては、次の2つの問題にぶつかることがあります。&lt;/P&gt;
&lt;P&gt;★問題1&lt;BR&gt;SMTPサーバが&lt;FONT color=#ff0000&gt;&lt;STRONG&gt;POPbeforeSMTP&lt;/STRONG&gt;&lt;/FONT&gt;に対応していると、このコードではメールを送れない&lt;/P&gt;
&lt;P&gt;★問題2&lt;BR&gt;サーバが25番ポートを受け付けず、&lt;STRONG&gt;&lt;FONT color=#ff0000&gt;別のポート番号&lt;/FONT&gt;&lt;/STRONG&gt;(587のことが多いかな)で受け付けている場合、メールを送れない&lt;/P&gt;
&lt;P&gt;これらに該当する場合、次のようなコードを付け足せば、無事にメールを送ることができます。&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT color=#006400&gt;//*******************************************************&lt;BR&gt;// メールオブジェクトの作成&lt;BR&gt;//*******************************************************&lt;/FONT&gt;&lt;BR&gt;MailMessage mail = new MailMessage();&lt;BR&gt;mail.From = "送信元メールアドレス";&lt;BR&gt;mail.To = "あて先メールアドレス";&lt;BR&gt;mail.Subject = "メール件名";&lt;BR&gt;mail.Body = "メール本文";&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT color=#006400&gt;//*******************************************************&lt;BR&gt;// SMTPの前にPOP（問題1の回避策）&lt;BR&gt;//*******************************************************&lt;/FONT&gt;&lt;BR&gt;string popUserName = "POPユーザ名";&lt;BR&gt;string popPassword = "POPパスワード";&lt;BR&gt;string popServerName = "POPサーバ名";&lt;BR&gt;int popPort = 110;&amp;nbsp; &lt;FONT color=#006400&gt;// 110でない場合は要変更&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;TcpClient tcp = new TcpClient();&lt;BR&gt;tcp.Connect(popServerName, popPort);&lt;BR&gt;using (StreamWriter sw = new StreamWriter(tcp.GetStream())) {&lt;BR&gt;　　sw.Write("USER " + popUserName + "\nPASS " + popPassword + "\nQUIT\n");&lt;BR&gt;}&lt;BR&gt;tcp.Close();&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT color=#006400&gt;//*******************************************************&lt;BR&gt;// 別のポート番号を指定（問題2の回避策）&lt;BR&gt;//*******************************************************&lt;/FONT&gt;&lt;BR&gt;int anotherPort = 587; &lt;FONT color=#006400&gt;// 25じゃない別のポート番号を指定&lt;/FONT&gt;&lt;BR&gt;mail.Fields["&lt;A href="http://schemas.microsoft.com/cdo/configuration/smtpserverport"&gt;http://schemas.microsoft.com/cdo/configuration/smtpserverport&lt;/A&gt;"] = anotherPort;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT color=#006400&gt;//*******************************************************&lt;BR&gt;// メール送信実行&lt;BR&gt;//*******************************************************&lt;/FONT&gt;&lt;BR&gt;SmtpMail.SmtpServer = "メール送信サーバー名またはIPアドレス";&lt;BR&gt;SmtpMail.Send(mail);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;これまで、この問題をどうすれば解決できるんだろう？&lt;BR&gt;と1年以上も悩んでいたのですが、ちゃんと解決する方法がありました(笑)&lt;BR&gt;同じことで悩んでる方がいらっしゃいましたら、ご参考にどうぞ。&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;p.s.&lt;BR&gt;MailMessageクラスとSmtpMailクラスは、.NET 2.0では非推奨になっております。&lt;BR&gt;くわしくはヘルプを。&lt;/P&gt;
&lt;P&gt;なぜこちらのクラスを使わないのかというと、いまだに文字化け問題から抜け出せないでいるからです(笑)&lt;BR&gt;近日中には、なんとかしたい・・・！&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/kiyochan/aggbug/66313.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>キヨ（kiyochan@wankuma.com）</dc:creator><title>Expression Web の基本的な操作概要についてのサイトをご紹介</title><link>http://blogs.wankuma.com/kiyochan/archive/2007/03/12/66236.aspx</link><pubDate>Mon, 12 Mar 2007 09:53:00 GMT</pubDate><guid>http://blogs.wankuma.com/kiyochan/archive/2007/03/12/66236.aspx</guid><wfw:comment>http://blogs.wankuma.com/kiyochan/comments/66236.aspx</wfw:comment><comments>http://blogs.wankuma.com/kiyochan/archive/2007/03/12/66236.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kiyochan/comments/commentRss/66236.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kiyochan/services/trackbacks/66236.aspx</trackback:ping><description>&lt;P&gt;Microsoft Expression Web製品レビュー（前編）&lt;BR&gt;Webデザイン・ツール「Expression Web」を試してみた&lt;BR&gt;&lt;A href="http://www.atmarkit.co.jp/fdotnet/special/expressionweb01/expressionweb01_01.html"&gt;http://www.atmarkit.co.jp/fdotnet/special/expressionweb01/expressionweb01_01.html&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;STRONG&gt;&lt;FONT color=#ff0000 size=4&gt;Expression Web&lt;/FONT&gt;&lt;/STRONG&gt;は、VisualStudioでWebフォームを作った経験があれば、比較的容易に操作できそうですね。&lt;BR&gt;Webページ制作に関しては、VisualStudioより操作性が向上されたところも多いようです。&lt;BR&gt;C#やVBのコードの記述は、やはりVisualStudioを使う必要がありますが。&lt;/P&gt;
&lt;P&gt;個人的には、まだExpression Webを使用したことはないのですが（DreamWeaverに慣れてしまってるので・・・）、初めてExpression Webを使う時には、このページがとても参考になりそうです。&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/kiyochan/aggbug/66236.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>キヨ（kiyochan@wankuma.com）</dc:creator><title>Visual Studio 2005 Service Pack 1 Update for Windows Vista</title><link>http://blogs.wankuma.com/kiyochan/archive/2007/03/07/65546.aspx</link><pubDate>Wed, 07 Mar 2007 20:16:00 GMT</pubDate><guid>http://blogs.wankuma.com/kiyochan/archive/2007/03/07/65546.aspx</guid><wfw:comment>http://blogs.wankuma.com/kiyochan/comments/65546.aspx</wfw:comment><comments>http://blogs.wankuma.com/kiyochan/archive/2007/03/07/65546.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kiyochan/comments/commentRss/65546.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kiyochan/services/trackbacks/65546.aspx</trackback:ping><description>&lt;P&gt;↓ここから入手できます。&lt;BR&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=90E2942D-3AD1-4873-A2EE-4ACC0AACE5B6&amp;amp;displaylang=ja"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=90E2942D-3AD1-4873-A2EE-4ACC0AACE5B6&amp;amp;displaylang=ja&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;インストールされた皆さんの評判をうかがったのち、インストールしたいと思います(笑)&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/kiyochan/aggbug/65546.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>キヨ（kiyochan@wankuma.com）</dc:creator><title>SQL Server 2005の開発生産性が高いというのは本当か</title><link>http://blogs.wankuma.com/kiyochan/archive/2007/02/28/64359.aspx</link><pubDate>Wed, 28 Feb 2007 10:12:00 GMT</pubDate><guid>http://blogs.wankuma.com/kiyochan/archive/2007/02/28/64359.aspx</guid><wfw:comment>http://blogs.wankuma.com/kiyochan/comments/64359.aspx</wfw:comment><comments>http://blogs.wankuma.com/kiyochan/archive/2007/02/28/64359.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kiyochan/comments/commentRss/64359.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kiyochan/services/trackbacks/64359.aspx</trackback:ping><description>&lt;P&gt;SQL Server 2005の開発生産性が高いというのは本当か&lt;BR&gt;&lt;A href="http://itpro.nikkeibp.co.jp/article/COLUMN/20070216/262227/"&gt;http://itpro.nikkeibp.co.jp/article/COLUMN/20070216/262227/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;・SQL Server 2005&lt;BR&gt;・SQL Server 2000&lt;BR&gt;・Oracle 10g R2&lt;/P&gt;
&lt;P&gt;を比較して、どれが開発生産性が高いかについてまとめられています。&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;このページの結論としては、「SQL Server 2005が一番開発生産性が高い」ということになっています。&lt;BR&gt;ただ、このページに書いてあることだけでは、一概にそうとは言えないかな～と思うところもあります。&lt;/P&gt;
&lt;P&gt;私個人的には、最近になってSQL Server 2005を使うようになったこともあり、まだSQL Server 2000の方に慣れています。&lt;BR&gt;2005の基本的な操作方法を習得中というところもあり、2000でできたアレは2005だとどうやってやるの？？ってことがよくあります。&lt;BR&gt;なので私にとっては。まだ2000の方が開発生産性は高いかな～と思っています(笑)&lt;/P&gt;
&lt;P&gt;みなさんも、やはり2005の方が生産性は高いと感じていらっしゃるのでしょうか？&lt;BR&gt;気になるところです(^_^)&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/kiyochan/aggbug/64359.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>