2009/12/26

ファイル

//ファイル名の取得
this.Name = System.IO.Path.GetFileName(this.FullPath);

                // ディレクトリ名の設定 (最後に'¥¥'は付かない)
                this.DirPath = Path.GetDirectoryName(this.FullPath);

                //ファイル名の設定(拡張子無し)
                this.NameWithoutExt = Path.GetFileNameWithoutExtension(this.FullPath);

                //拡張子の取得(1文字目は'.')
                this.Ext = Path.GetExtension(this.FullPath);

2009/12/25

sshの接続確立が遅い

SSHでログインはできるが、接続確立がやたら遅い場合がある。
(ひどいのは、タイムアウトしてしまう。)
これは、SSHの設定で、クライアントの名前解決をしようとして、時間がかかっていると思われます。

なので、ログイン動作を軽快にするには、名前解決をしないように設定する事が望まれる。


■設定ファイル
 /etc/ssh/sshd_config

■設定場所
 デフォルトは、多分、「#UseDNS=yes」になっているので、
 
 #UseDNS=yes

  ↓

 UseDNS=no

 に変更し、再度、SSHの起動を行ってください。

/etc/init.d/sshd restart

2009/12/10

コミットされたら、公開用ディレクトリを更新

リポジトリの内容をあるディレクトリに展開しておきます。
リポジトリに対し、コミット処理が行われたら、そのコミットをフックし、
展開しているディレクトリを更新します。

リポジトリ file:///home/svn_rep/sample 及び、
公開ディレクトリを /share/public/sample とします。

※プロジェクト名 = hoge とします。

実行権付きでpost-commit の名前で実行可能なファイルを作成します。

/home/svn/repos/hoge(※)/hooks/post-commit

post-commitファイルの内容
----------------------------------------
#!/bin/sh

cd /home/hoge(※)/www
svn update

2009/12/05

MySQL でシーケンス(Auto_increment)の値を参照します

MySQL でオートインクリメント設定したカラムの値を参照します。

SHOW TABLE STATUS WHERE NAME = 'テーブル名';


また、オートインクリメントの値(Auto_increment)の値を設定するには、
下記で実行します。

ALTER TABLE テーブル名 AUTO_INCREMENT=1;

2009/12/02

ホスト名とポートを指定してMySQLに接続

SSHで接続し、さらに異なる筐体にあるMySQLに接続し、
処理を行いたい場合、ホスト名とポートを指定して接続します。
結構、今更ですが、備忘録として残します。

mysql -u ユーザー名 -p DB名 -h ホスト名 --port ポート番号

ちなみに、カラム名の変更は下記の通り

ALTER TABLE テーブル名 CHANGE 変更前のカラム名 変更後のカラム名 型;

型は何故か、指定しないと動作しません。

2009/10/27

Hobbit

サーバー監視ツール「Hobbit」のインストールについて記述します。

Hobbitを動作させるには大きく分けて下記の3つのステップがあります。

1.サーバーのインストール
2.クライアントのインストール
3.監視項目 / しきい値 / アラート・メールの設定

まず、1.の「サーバーのインストール」を説明します。
※HobbitはUnix系OSならどれでも利用できるのですが、今回のOSは「CentOS5.3」を使用します。

はじめに必要なパッケージをインストールします。
yum install openldap-devel openssl-devel pcre-devel 


その他のパッケージをインストールする為、レポジトリの追加を行います。
GPG-KEYのインポートを行います。
rpm --import http://ftp.riken.go.jp/pub/Linux/dag/RPM-GPG-KEY.dag.txt


次にレポジトリ・ファイルを作成します。
# vi /etc/yum.repos.d/dag.repo
[dag]
name=Dag RPM Repository for Red Hat Enterprise Linux
baseurl=http://ftp.riken.jp/Linux/dag/redhat/el$releasever/en/$basearch/dag
gpgcheck=1
gpgkey=http://ftp.riken.go.jp/pub/Linux/dag/RPM-GPG-KEY.dag.txt
enabled=0


設定したレポジトリを有効にするようにしてインストールします。
# yum --enablerepo=dag install fping rrdtool-devel


インストールが終わったら、Hobbitを実行するユーザーを作成作成します。
# useradd -c 'Hobbit Admini' hobbit
# passwd hobbit


fpingのグループとパーミッションを変更します。
# chgrp hobbit /usr/sbin/fping
# chmod g+x /usr/sbin/fping


次にhobbitをダウンロードします。
# cd /usr/local/src
# wget http://downloads.sourceforge.net/hobbitmon/hobbit-4.2.0.tar.gz?modtime=1155195064&big_mirror=0


ダウンロードしたTAR.GZファイルを解凍し、解凍先のディレクトリに移動します。
# tar zxf hobbit-4.2.0.tar.gz
# cd hobbit-4.2.0


インストールしてみます。ホスト名とIPアドレスは環境に合わせてください。(*1)

# ./configure
Configuration script for Hobbit

This script asks a few questions and builds a Makefile to compile Hobbit

Checking your make-utility
Checking pre-requisites for building Hobbit

Checking for fping ...
Hobbit has a built-in ping utility (hobbitping)
However, it is not yet fully stable and therefore it
may be best to use the external fping utility instead.
I found fping in /usr/sbin/fping
Do you want to use it [Y/n] ?
y
Checking to see if '/usr/sbin/fping 127.0.0.1' works ...
127.0.0.1 is alive
OK, will use '/usr/sbin/fping' for ping tests
NOTE: If you are using an suid-root wrapper, make sure the 'hobbit'
user is also allowed to run fping without having to enter passwords.
For 'sudo', add something like this to your 'sudoers' file:
hobbit: ALL=(ALL) NOPASSWD: /usr/local/sbin/fping

Checking for RRDtool ...
test-rrd.c: In function ‘main’:
test-rrd.c:30: error: too few arguments to function ‘rrd_graph’
make: *** [test-compile] エラー 1
Not RRDtool 1.0.x, checking for 1.2.x
Found RRDtool include files in /usr/include
Found RRDtool libraries in /usr/lib
Linking RRD with PNG library: -L/usr/lib -lpng

Checking for PCRE ...
Found PCRE include files in /usr/include
Found PCRE libraries in /usr/lib

Checking for OpenSSL ...
Found OpenSSL include files in /usr/include
Found OpenSSL libraries in /usr/lib

Hobbit can use the OpenSSL library to test SSL-enabled services
like POP3S, IMAPS, NNTPS and TELNETS. If you have the OpenSSL
library installed, I recommend that you enable this.

Do you want to be able to test SSL-enabled services (y) ?
y

Checking for LDAP ...
test-ldap.c: In function ‘main’:
test-ldap.c:16: 警告: implicit declaration of function ‘ldap_init’
test-ldap.c:16: 警告: assignment makes pointer from integer without a cast
Found LDAP include files in /usr/include
Found LDAP libraries in /usr/lib

Hobbit can use your OpenLDAP LDAP client library to test LDAP servers.

Do you want to be able to test LDAP servers (y) ?
y
Enable experimental support for LDAP/SSL (OpenLDAP 2.x only) (y) ?
y

Checking for Large File Support ...
Large File Support OK

Setting up for a Hobbit server

What userid will be running Hobbit [hobbit] ?

Found passwd entry for user hobbit:x:501:501:Hobbit
Admin:/home/hobbit:/bin/bash

Where do you want the Hobbit installation [/home/hobbit] ?

OK, will configure to use /home/hobbit as the Hobbit toplevel directory

What URL will you use for the Hobbit webpages [/hobbit] ?

Where to put the Hobbit CGI scripts [/home/hobbit/cgi-bin] ?
(Note: This is the filesystem directory - we will get to the URL shortly)

What is the URL for the Hobbit CGI directory [/hobbit-cgi] ?
(Note: This is the URL - NOT the filesystem directory)

********************** SECURITY NOTICE ****************************
If your Hobbit server is accessible by outsiders, then you should
restrict access to the CGI scripts that handle enable/disable of
hosts, and acknowledging of alerts. The easiest way to do this is
to put these in a separate CGI directory and require a password to
access them.
Even if your Hobbit server is on a secured, internal network, you
may want to have some operations (like disabling a host) be password-
protected - that lets you see who disabled or acknowledged an alert.

Where to put the Hobbit Administration CGI scripts [/home/hobbit/cgi-secure] ?
(Note: This is the filesystem directory - we will get to the URL shortly)

What is the URL for the Hobbit Administration CGI directory [/hobbit-seccgi] ?
(Note: This is the URL - NOT the filesystem directory)

** Note that you may need to modify your webserver configuration.
** After installing, see /home/hobbit/server/etc/hobbit-apache.conf for
an example configuration.

To generate Hobbit availability reports, your webserver
must have write-access to a directory below the Hobbit
top-level directory. I can set this up if you tell me
what group-ID your webserver runs with. This is typically
'nobody' or 'apache' or 'www-data'
If you dont know, just hit ENTER and we will handle it later.

What group-ID does your webserver use ?
apache (*1)

Where to put the Hobbit logfiles [/var/log/hobbit] ?

What is the name of this host [cent52sv.fujitoko.com] ?
cent52sv (*1)

What is the IP-address of this host [127.0.0.1] ?
192.168.0.15(*1)

** NOTE: Using 127.0.0.1 (loopback), but it is probably not what you want **

Where should I install the Hobbit man-pages (/usr/local/man) ?

Using Linux Makefile settings

Created Makefile with the necessary information to build Hobbit
Some defaults are used, so do look at the Makefile before continuing.

Configuration complete - now run make (GNU make) to build the tools

# make && make install

2009/10/25

Linux 設定周り

とりあえず、インストールしたら追加するパッケージをメモ
(※sshは導入済みが前提)

1.apache
yum install httpd

2.subversion
yum install subversion
yum install mod_dav_svn (WebDavとの連携モジュール、必要に応じ)

3.VNC SERVER
yum install vnc-server

4.gFTP
yum install gftp

5.PostgreSql
yum install postgresql

6.MySQL
yum install mysql

7.WebDav設定
 WebDavの機能を利用するには、特に新しく何かをインストールする必要はありません。
 設定を変更するだけで使用できます。

 ------------------------------ httpd.conf編集
 # 175行目と179行目のdav_moduleとdav_fs_moduleのコメントをはずし、有効にします
 LoadModule dav_module modules/mod_dav.so
 LoadModule dav_fs_module modules/mod_dav_fs.so
 # 551行目と554行目ののコメントをはずします
 
  DAVLockDB /var/lib/dav/lockdb
 


 # WebDavを有効にするディレクトリの設定を行う。ファイルの末尾に追加する。
 
# WebDavを有効にする
DAV On
 

 ------------------------------ httpd.conf終了
 # /etc/init.d/httpd restart # apacheを再起動する
 httpd を停止中: [ OK ]
 httpd を起動中: [ OK ]


ここまでやったら、chkconfig にサービス起動設定をしましょう。

2009/10/24

VMWare Playerに CentOS5をインストール(vmdk, vmx の生成)

1.VMware Playerのダウンロード
下記からダウンロードしてインストールします。
http://www.vmware.com/download/player/

2.仮想ディスクファイルの作成
VMWare Playerは .vmdkという特殊なファイルを仮想ハードディスクとしてマウントします。
この作成機能が商用版VMWareにしか存在しないのですが、実はQemuというフリーソフトで作成できます。

QEMU on Windows

コマンドプロンプトで以下のコマンドを実行してください。

> qemu-img.exe create -f vmdk ファイル名 サイズ
例> qemu-img.exe create -f vmdk C:\WORK\CentOS5.4.vmdk 20G

3.VMWareのコンフィグレーションファイルの作成
下記を記入し、「CentOS5.4.vmx」というファイル名で保存します。


.encoding = "Shift_JIS"
config.version = "8"
virtualHW.version = "3"
memsize = "512"
MemAllowAutoScaleDown = "FALSE"
ide0:0.present = "TRUE"
ide0:0.fileName = "CentOS5.3.vmdk"
ide1:0.present = "TRUE"
#ide1:0.fileName = "auto detect"
#ide1:0.deviceType = "cdrom-raw"
ide1:0.fileName = "C:\Work\@Soft\@OS\CentOS-5.3-i386-bin-DVD.iso"
ide1:0.deviceType = "cdrom-image"
floppy0.present = "FALSE"
#floppy0.present = "TRUE"
#floppy0.fileName = "A:"
ethernet0.present = "TRUE"
sound.present = "TRUE"
displayName = "CentOS5.3"
#guestOS = "winnetstandard" # Windows Server 2003 Standard Edition
#guestOS = "winxppro" # Windows XP Professional
#guestOS = "win2000Pro" # Windows 2000 Professional
#guestOS = "redhat" # Red Hat Linux (generic)
#guestOS = "suse" # SuSE Linux (generic)
#guestOS = "netware5" # Netware 5
#guestOS = "netware6" # Netware 6
#guestOS = "solaris9" # Solaris 9
#guestOS = "solaris10" # Solaris 10 (experimental)
#guestOS = "freebsd" # FreeBSD (generic)
#guestOS = "otherlinux" # Other Linux
guestOS = "other24xlinux" # Other Linux 2.4x kernel
#guestOS = "other26xlinux" # Other Linux 2.6x kernel


   コンフィグファイルを自動生成してくれるサイトがあるので、そちら(下記)を使用するのも有りです。
.vmxファイル生成サイト: VM Builder


  これで後は、VMWarePlayerを実行して、「ファイルを開く」から3.で作成した.vmxファイルを指定すれば、起動されます。

2009/10/16

rsync

ファイル同期アプリ

http://www.infoscience.co.jp/technical/rsync/index.html

これは便利だ!

SSH、.ppkでの認証(RSA認証)の設定

接続する側PCをクライアント、接続される側PCをサーバと呼称し、
クライアントのOSはWindowsVista、サーバのOSは、CentOS5.3を前提で記述します。
(よって、下記の「SSHの設定」とある箇所は、CentOS5.3上でのお話になります。)
その他、前提として、「PuTTYごった煮版」がクライアントにインストールされているものとします。


まず、クライアント側での作業を行います。

①秘密鍵と公開鍵を作成します。
 a.
「PuTTYごった煮版」からputtygen.exeを起動し、[PuTTY Key Generator]というウィンドウを表示します。
  画面上メニューの[メニュー]->[鍵(K)]->[SSH-2 RSA 鍵]をオンにして、
  [メニュー]->[鍵(K)]->[鍵ペアの生成]をクリックします。

 via http://www.atmarkit.co.jp/flinux/rensai/linuxtips/429usekeyssh.html

b.
画面上で適当にマウスをグリグリ動かし、乱数を発生させ、キーを生成します。



③画面が変わったら、「公開鍵の保存」ボタン、「秘密鍵の保存」ボタンをそれぞれを押下します。
 この時、公開鍵の名前を、「xxxx_local.pub」とかの名前にしておくと後で解りやすいです。
 更に秘密鍵の名前を「xxxx.ppk」とします。

 ※保存の際、パスワードなしでよいか?と聞かれても、そのままOKを選択します。

④「xxxx_local.pub」のファイルをサーバへアップロードします。
 /home/ユーザー名/.ssh/xxxx_local.pubへアップ
 ex.) /home/hogehoge/.ssh/xxxx_local.pubへアップ

※ 「.ssh」ディレクトリが無い場合は作成してください。
   (最後に、再度、説明書きします。)

------------------ここまでローカルの作業--------------------

⑤ サーバへログインします。
 ログインしたら、通常ログインするユーザー(root以外)にスイッチします。
 ex). su - hogehoge

先ほど「xxxx_local.pub」をUPしたディレクトリへ移動します。
 ex). cd /home/hogehoge/.ssh/


⑥puttygen.exeで作成した公開鍵はOpenSSHでは使用できないので、
 使用可能な形式に変換します。
 
 ssh-keygen -i -f xxxx_local.pub > xxxx.pub ←変換

 作成された「 xxxx.pub 」の権限を0640に設定
chmod 0640 xxx.pub

⑦公開鍵を変換したら、それを$HOME/.ssh/authorized_keysというファイルに追加します。

 cat xxxx.pub >> $HOME/.ssh/authorized_keys

 ※ authorized_keysファイルが無い場合、作成して下さい。


⑧最後に、authorized_keysファイルを自分だけがアクセスできるようにします。

 chmod 600 $HOME/.ssh/authorized_keys

------------------------------------------------

ここまでで作業終了なのですが、デフォルトだと、「.ssh」ディレクトリが無かったり、
「authorized_keys 」ファイルが無かったりしますので、その処理をちょっとメモ。

a.「.ssh」が無い場合、ディレクトリを作成しましょう。
 
 mkdir /home/ユーザ名/.ssh

 作成した「.ssh」ディレクトリの権限を「0700」に設定

b.「authorized_keys」ファイルが無い場合、viなどで作成しましょう。

 cd $HOME/.ssh
 vi authorized_keys



c.また、authorized_keysファイルが無い場合は、
 sshd_configファイルで鍵認証が許可されていない可能性が大ですので、
 sshd_configファイルを編集します。

 vi /etc/ssh/sshd_config

 PubkeyAuthentication yes
 AuthorizedKeysFile .ssh/authorized_keys

 →先頭に#が入ってコメントアウトされているので、#だけ外して保存して下さい。


d.SSHを再起動します。

 /etc/init.d/sshd restart


これで、正常に起動できれば設定は完了です。
後は、「hogehoge.ppk」を使用してアクセスできるか試してみて下さい。






 

rootでのログイン禁止

SSHのインストール(CentOSとかはデフォルトで入ってると思います。)

 yum install sshd


インストールしたSSHの設定ファイル(sshd_config)を編集し、rootでのログインを禁止します。

vi /etc/ssh/sshd_config

 ※デフォルトだと、/etc/sshに入りますが、ソースから入れた場合は、入れた場所を参照して下さい。


ファイルの「PermitRootLogin yes 」の記述を「PermitRootLogin no」に変更します。


んで、sshを再起動します。

# /etc/init.d/sshd restart


うんちく
PermitRootLogin (root ログイン許可) ssh (1) を使って、root がログインできるかどうか指定します。

この引数の値は
 "yes"
 "without-password"(パスワード認証なし)、
 "forced-commands-only"(強制コマンドのみ)、
 "no"
のいずれかになります。※デフォルトは「yes」です。

この設定項目を"without-password"にすると、root はパスワード認証ではログインできなくなります。
この設定項目を"forced-commands-only"にすると、root は公開鍵認証を使ってログインできます。
 ※鍵にcommand が指定されている場合にかぎります
この設定項目を"no"にすると、root はsu - のみでしかログインできなくなります。

2009/09/12

Sun xVM VirtualBoxでゲストOSからホストOSへコントロールを戻す

Sun xVM VirtualBoxでゲストOSからホストOSへコントロールを戻す方法

CTRLボタンがキーボード上の左右にありますが、(右側限定)CTRLを押すか、

右側のCTRLを押しながら、ホストOSの画面をクリック

とりあえず、キーボードの右側にあるCTRLを押すと戻ります。

2009/08/27

MySqlでASCIIに文字化け

connectした後に

mysql_query('set names utf8');

を実行しましょう。

2009/08/26

TortoiseSVNの設定 「接続が突然閉じました」エラー

設定→ネットワーク→SSHクライアントの欄に、以前は、

(TortoisePlink.exeのフルパス) -C -l (ログイン名) -i (*.ppk 秘密鍵のパス)を入力。

と設定していたが、「接続が突然閉じました」エラーが再度発生したので、

(TortoisePlink.exeのフルパス) -ssh -l (ログイン名) -i (ppkのパス)

と設定を変更しました。

うーん、未だに原因は不明だが、とりあえず、これで接続が出来るようになりました。

2009/08/21

TortoiseSVNの設定 「接続が突然閉じました」エラー

「接続が突然閉じました」エラーにハマッたのでメモ

TortoiseSVNの設定で、「ネットワーク」-「SSH」を選択して「SSHクライアント」の欄に
(TortoisePlink.exeのフルパス) -C -l (ログイン名) -i (*.ppk 秘密鍵のパス)を入力。

これで、TortoiseSVNからチェックアウトを押下したら「接続が突然閉じました」のエラーメッセージ
Puttyの「セッション一覧」の中にある、「標準の設定」にIPや、ホスト名、ポート番号が設定されていたことが原因
これを、削除して再度、保存し、TortoiseSVNからチェックアウトで無事チェックアウト

いやーハマッた…

Puttyでデフォルトの文字コード

Puttyではデフォルトの文字コードEUC-JPになっているため、Puttyでコマンドを叩くと文字化けを頻繁に引き起こします。
これは、サーバーから返却される文字がUTF-8に設定されているからです。
よって、Puttyのデフォルトの文字コードUTF-8に設定してあげると上記の問題は解決します。

では、、解決方法です。(Puttyごった煮版を使用を前提で記載します。)

①起動時のダイアログ画面で左のカテゴリツリーの中からウィンドウ->変換を選択

②文字コードの設定->文字コードのプルダウンから「UTF-8」を選択

③左のカテゴリツリーでセッションを選択

④セッション一覧とあるラベルのすぐ下にあるテキストボックスに「Default Settings」と入力して保存ボタン押下

保存しているセッション毎に保存ボタンを押下すると、次回からは「UTF-8」でのアクセスになります。

2009/04/16

SQLServerで、インジェクション対策や、エスケープ処理

SQLServerで、インジェクション対策や、エスケープ処理を行うのにParameters.Add( sqlStr )が
使いづらいので下記のメソッドを作成しました。
※ネタ元は、右記のURLです。http://msdn.microsoft.com/ja-jp/library/aa302392.aspx



        private string escape( string param)
        {
            string str = param;
            str  = str .Replace( "'", "''" );
            str  = str.Replace( "[", "[[]" );
            str  = str.Replace( "%", "[%]" );
            str  = str.Replace( "_", "[_]" );
            return s;
        }

2009/04/15

アプリケーションの終了

C#でApplication.Exit() を実行しても、その後の処理が行われる事にビックリしている人は多いのではないでしょうか?

その後の処理を実行されなくするには、下記を実行します。

Environment.Exit(0);

※(0)は戻り値です。任意で設定可能です。
 よくあるパターンでは、0は正常終了、1は○○エラー、2は■■エラーという様に分岐させたりします。

2009/04/06

二重起動の無効化

Program.csふぁいるに下記を追記します。


        ///
        /// アプリケーションのメイン エントリ ポイントです。
        ///
        [STAThread]
        static void Main()
        {
            const string MUTEX_NAME = "MutexApplication";

            // Mutex インスタンスを生成します。二番目の引数 MUTEX_NAME は生成する Mutex の識別名です。
            System.Threading.Mutex mutex = new System.Threading.Mutex( false, MUTEX_NAME );

            // WaitOne メソッドを使って、所有権を得ます。
            // 最初の引数で 0 ミリ秒を指定して、所有権が取得できなくても待ちません。
            if ( mutex.WaitOne( 0, false ) )
            {
                // 下記の色付のコードはデフォルトで記入されているコードです。
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault( false );
                Application.Run( new Form1() );

                mutex.ReleaseMutex();
            }
            else
            {
                // WaitOne メソッドで所有権を取得できなかった場合の処理です。
                MessageBox.Show( "アプリケーションは既に起動しています。", "タイトル");

            }

            mutex.Close();
        }

フォーム右上の閉じるボタン無効化

protected override System.Windows.Forms.CreateParams CreateParams {
get {
const int CS_NOCLOSE = 0x200;

System.Windows.Forms.CreateParams createParams = base.CreateParams;
createParams.ClassStyle |= CS_NOCLOSE;

return createParams;
}
}

2009/04/03

//モーダル表示
form.ShowDialog();

//モーダレス表示
form.Show();


show()      はモーダレス
ShowDialog() はモーダルで
指定フォームを表示します。

C# ファイルの読取専用属性を解除

using System.IO;

下記で属性が外せます。

File.SetAttributes(ファイルパス,FileAttributes.Normal);

//ふぁいる属性取得(FileAttributes列挙体を返す)
File.GetAttributes(@"c:\hoge\hoge.txt");

//読み取り専用属性があるか調べる
if ((File.GetAttributes(@ファイルパス) & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
{
"読み取り専用属性があります。";
}

2009/03/04

設定ファイルから全キーの取得

プロジェクトと同じ名前空間とする場合、

//設定値「path」を追加、変更
Properties.Settings.Default.path = "c:\hoge";

//または次のようにもできる
Properties.Settings.Default["path "] = "c:\hoge";


名前空間を指定して、設定する (名前空間 「global::EXCELBOOKS2SHEET」の場合)
global::EXCELBOOKS2SHEET.Properties.Settings.Default.path = "c:\hoge";

因みに、このファイルは、
C:¥¥Documents and Settings¥¥ユーザー名¥¥Local Settings¥¥Application Data
に作成され、ファイルを削除して、書き込みを行うと自動でファイルが作成されます。

//保存
global::EXCELBOOKS2SHEET.Properties.Settings.Default.Save();

//リセット ( 保存されている設定を削除して既定値に戻す 
global::EXCELBOOKS2SHEET.Properties.Settings.Default.Reset();

//リセット ( 保存されていた初期状態に戻す 
global::EXCELBOOKS2SHEET.Properties.Settings.Default.Reload();

//すべてのキーとその値を取得
Hashtable ht = new Hashtable();

Properties.Settings config = Properties.Settings.Default;

foreach (string key inconfig.Context.Keys)
{
      ht[key] = config[key].ToString(); 
}




2009/03/01

EXCEL セルの背景色変更 

セルの背景色変更

※oSheetはエクセルシート インスタンス

using System.Drawing;

oSheet.get_Range("A1", "B1").Interior.Color = ColorTranslator.ToOle(Color.blue);

色の指定は下記の形式でも設定可能です。
oSheet.get_Range("A1", "B1").Interior.Color = ColorTranslator.ToOle(Color.FromArgb(252, 219, 186));


2009/02/27

EXCELの使用している最終行と最終列を取得

using Excel = Microsoft.Office.Interop.Excel;


/// Excelオブジェクト
Excel.Application oXls;

/// ワークブックコレクション
Excel.Workbook oWBook = this.oXls.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);

/// ワークシートコレクション
Excel.Sheets oSheets =oWBook.Sheets;

///ワークシート
Excel.Worksheet oSheet = (Excel.Worksheet)oWBook.ActiveSheet;

Object after = this.sheets[ oSheets .Count];
Object before = Missing.Value;

// ワークシートを取得
oSheet = (Excel.Worksheet)this.sheets.Add(before, after, 1, Excel.XlSheetType.xlWorksheet);

/// EXCELの使用している最終行を取得
oSheet.UsedRange.Rows.Count;

/// EXCELの使用している最終列を取得
oSheet.UsedRange.Columns.Count;

2009/02/25

CSVファイルをデータセットへ格納

CSVファイルをデータセットへ格納する処理を記載します。

//usingします。
using Microsoft.VisualBasic.FileIO;

//ファイル名
name = "hoge.csv";

//ファイルパス
path = "C\:test\";

//SQLを作成します
string sql = String.Format("SELECT * FROM [{0}]",name);

//接続文字列を作成します(Microsoft.Jet.OLEDB.4.0 の部分は参照設定されているファイルにより異なります)
string conString = String.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Text;HDR=No;"";",path);
            
//コネクションの生成
OleDbConnection con = new OleDbConnection(conString);
            
//オープンします
con.Open();

//SQLを実行します
OleDbDataAdapter oda = new OleDbDataAdapter(sql, con);

//クローズ処理
con.Close();

//データテーブル作成
DataTable table = new DataTable(name);

//Fillする
oda.Fill(table);

//データセット作成
DataSet ds = new DataSet();

//データセットにデータテーブルを設定
ds.Tables.Add(table);

EXCELのファイルオープン処理

EXCELのファイルオープン処理
前提条件:using Excel = Microsoft.Office.Interop.Excel;
(※上記usingでエラーが表示される場合は、参照設定されていないか、既に「Excel」という名前空間が存在している状態となります)

//ファイル名
string excelName = "C:\\sample.xls";

 // Excelインスタンス
Excel.Application oXls 
 = new Excel.Application();

// 確認のためExcelのウィンドウを表示する
oXls.Visible = true; 

// Excelファイルをオープンする
Excel.Workbook oWBook   =  (Excel.Workbook)(oXls.Workbooks.Open(
      excelName,  // オープンするExcelファイル名
     Type.Missing, // (省略可能)UpdateLinks (0 / 1 / 2 / 3)
     Type.Missing, // (省略可能)ReadOnly (True / False )
     Type.Missing, // (省略可能)Format
      // 1:タブ / 2:カンマ (,) / 3:スペース / 4:セミコロン (;)
      // 5:なし / 6:引数 Delimiterで指定された文字
      Type.Missing, // (省略可能)Password
      Type.Missing, // (省略可能)WriteResPassword
      Type.Missing, // (省略可能)IgnoreReadOnlyRecommended
      Type.Missing, // (省略可能)Origin
       Type.Missing, // (省略可能)Delimiter
       Type.Missing, // (省略可能)Editable
       Type.Missing, // (省略可能)Notify
       Type.Missing, // (省略可能)Converter
       Type.Missing, // (省略可能)AddToMru
       Type.Missing, // (省略可能)Local
       Type.Missing  // (省略可能)CorruptLoad
));

2009/02/23

「Delegate」による非同期スレッド処理

非同期呼び出しは Delegate.BeginInvoke によって実行され、戻り値に IAsyncResultが返却されます。
このIAsyncResult を取得するにはEndInvokeを使用することにより、引数として IAsyncResult が取得できます。
デリゲートは、スレッド処理でも、引数の指定、戻り値の取得のし易いさが特徴的なので、ぜひ熟知しましょう。

// 処理の待ち合わせ
delegate void ThreadDelegate( );

class AsyncDelegateInvoke
{
public static void SampleMethod()
{
// 非同期に実行する内容
}

public static void Main()
{
ThreadDelegate dlgt=new ThreadDelegate( SampleMethod );
IAsyncResult asynresult = dlgt.BeginInvoke( null,null );
// メインスレッドで実行する内容
dlgt.EndInvoke( asynresult ); // EndInvoke による完了待ち
}
}

// IAsyncResult.IsComplete をポーリング
delegate void SampleAsyncDelegate( );

class AsyncDelegateInvoke
{
public static void ThreadDelegate()
{
// 非同期に実行する内容
}
public static void Main()
{
ThreadDelegate dlgt=new ThreadDelegate( SampleMethod );
IAsyncResult asynresult = dlgt.BeginInvoke( null,null );
// メインスレッドで実行する内容

// 完了待ち
while( !asynresult.IsComplete() ) Thread.Sleep(0);

 // 完了後の情報の引き取り
dlgt.EndInvoke( asynresult );
}
}

// 引数の指定とコールバックによる戻り値取得
delegate void ThreadDelegate( string str );

class AsyncDelegateInvoke
{
public static void SampleMethod(string str)
{
// 非同期に実行する内容
}

  //スレッド完了時に行われる処理
private static void AsyncComplete( IAsyncResult ar )
{
// スレッド完了時処理
AsyncResult asyncResult= (AsyncResult)ar;
 
ThreadDelegate dlgt = (ThreadDelegate)asyncResult.AsyncDelegate;

dlgt.EndInvoke( ar );
}


public static void Main()
{
     //インスタンス生成 
ThreadDelegate dlgt=new ThreadDelegate( SampleMethod );

//引数が複数ある場合は、カンマ区切りで複数指定する。 処理が完了するとAsyncCompleteで検知する。
AsyncCallback callback =new AsyncCallback(str , AsyncComplete );
 
     //処理実行 
IAsyncResult asynresult = dlgt.BeginInvoke( callback,null );
 
 // メインスレッドで実行する内容
}
}

ファイル書込み

C#でのファイル書き込み処理について、説明します。

1.手順
 ①ファイルパス設定
 ②ファイルの有無確認
 ③ファイルの書込み

2.コード

// ファイルフルパス設定
string fullpath = @"c:\hoge.txt";

//ファイルの生む確認をします
 if (! System.IO.File.Exists(fullpath ))
 {
        MessageBox.Show("ファイルが存在しません");

        //ファイルを作成する場合の処理 
        using (System.IO.StreamWriter sw = System.IO.File.CreateText(fullpath ))
        {
               //書き込み処理 
               sw.WriteLine("あいうえお");

               //書き込み処理 
                sw.Write("This is the ");

                //閉じる  
                sw.Close();
         }
 }

//※ファイルの有無確認は「File.Exists(fullpath )」でしたが、
//※ディレクトリの有無確認は、Directory.Exists(dirPath)で行います。

//true: 追記 / false:上書き 
appendflg = false;   

//文字コードをシフトJISにします。
System.Text. Encoding   encoder =  Encoding.GetEncoding("Shift_JIS")

//ファイルストリームインスタンスを生成(ファイルパス 、書き込みモード 、エンコード  )
System.IO. StreamWriter sw = new StreamWriter(fullPath,  appendflg ,  encoder  );

//書き込み処理 
sw.WriteLine("あいうえお");

//書き込み処理 
sw.Write("This is the ");

//閉じる 
sw.Close();

2009/02/22

ファイルパス

下記のファイルパスが設定されていると仮定して説明します。
string FullPath = "c:\test\hoge\hoge.txt" ;

 //ファイル名の取得
 string Name = System.IO.Path.GetFileName(FullPath);
 ※hoge.txt が取得できます。

 // ディレクトリ名の取得 (最後に'¥¥'は付かない)
 string DirPath =  System.IO.Path.GetDirectoryName(FullPath);
 ※c:\test\hoge が取得できます。

 //拡張子無しのファイル名の取得
 string NameWithoutExt =  System.IO.Path.GetFileNameWithoutExtension(FullPath);
 ※hoge が取得できます。

 //拡張子の取得(1文字目は'.')
 string Ext =  System.IO.Path.GetExtension(FullPath);
 ※.txt が取得できます。

2009/02/21

ドラッグアンドドロップ

Windowsアプリケーションでドラッグ&ドロップ処理の作成をします。
対象:Visual C# .NET または Visual C# 2005

1.手順
①ドロップターゲットのAllowDropプロパティをTrueに設定します。
②DragEnterイベントによりオブジェクトにドラッグされたことを検知します。
③Dropイベントによりオブジェクトにドロップされたオブジェクトを取得し、処理を行います。

※例:フォーム上にデータグリッド「dataGridView1」が、存在すると仮定し説明します。
    よって、他のオブジェクトの場合、「dataGridView1」の部分を変更して下さい。

    private System.Windows.Forms.DataGridView dataGridView1;


2.実際のコード
①VS上で、ドラッグ&ドロップしたいターゲットのオブジェクトの下記のプロパティを変更します。
これにより、ファイルなどをオブジェクト上にドラッグできるようになります。

 プロパティ dataGridView1.AllowDrop = True

②下記のイベントは、「dataGridView1」にドラックされた時に発生します。

protected void dataGridView1_DragEnter(object s, DragEventArgs e)
{
// ドラックされたデータ内にファイルが存在するか判定します。
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
//カーソルを取得(カーソルを取得しないとドロップイベントが起動しません。)
e.Effect = DragDropEffects.All;
}
}



③下記のイベントはドラッグしたオブジェクトを「dataGridView1」でドロップした際に発生します。
protected void dataGridView1_DragDrop(object s, DragEventArgs e)
{

//ドラッグされたオブジェクトからファイルパスコレクションを取得
string[] FilePaths = (string[])e.Data.GetData(DataFormats.FileDrop);

//ファイルパスコレクションから各ファイルのフルパスを取得
foreach (string FilePath in FilePaths)
{
//ファイルのフルパスを取得
System.IO.FileInfo file = new System.IO.FileInfo(FilePaths);
}
}