Visual Studio Community 2013 と Subversion でソース管理

Visual Studio には Source Control というソース管理を行うための拡張機能があります。これに対応しているフリー(*1) で使えるソース管理プラグインに VisualSVN というのがあります。

このプラグインで Visual Studio 統合開発環境(IDE) から Subversion を使用してソース管理が行えます。

(注 *1 : Community License に該当すれば free です。詳しくは VISUAL SVN//Licensing をご覧ください。)

 

Subversion サーバーの準備

ソース管理リポジトリは Subversion サーバーを準備する必要があるので、 Visual SourceSafe ほどお手軽ではないんですが、一度サーバーを用意すれば手間はかかりません。

Subversion サーバーのインストール作業はこちらをご覧ください。

※また、必要に応じて SSL や ベーシック認証で保護してください。

 

TortoiseSVN (Windows Subversion クライアント) の準備

TortoiseSVN クライアントをダウンロード:https://www.visualsvn.com/visualsvn/download/tortoisesvn/

  1. [Download Now] ボタンをクリック
  2. TortoiseSVN-1.8.9.26117-win32-svn-1.8.11.msi を保存して実行

(※お使いの Windows のよって 32ビット版か64ビット版のどちらかを選んでダウンロードします。)

 

VisualSVNプラグインの準備

VisualSVNプラグインは次のサイトからダウンロードします: https://www.visualsvn.com/visualsvn/

  1. [Download VisualSVN now and start using it for free] ボタンをクリック
  2. [Download Now] ボタンをクリック
  3. VisualSVN-4.0.11.msi を保存して実行

 

Visual Studio Community 2013 統合開発環境 (IDE) の準備

VisualSVN をインストールしたら Visual Studio のソース管理プラグインを VisualSVN に設定します:

  1. Visual Studio Community 2013 を起動
  2. [ツール]-[オプション] メニューを選択
  3. [オプション]ダイアログ左側パネルから [ソース管理]->[プラグイン選択] を選択
  4. [現在のソース管理プラグイン] を選択して一覧から [VisualSVN]を選択
  5. [OK]をクリック

Visual Studio Community 2013 のメニューに [VISUAL SVN] というメニューが表示されます。

 

これでソース意管理の準備ができました。

次回は簡単な使い方をご紹介します。

Visual Studio Express 2013 for Web の HTMLデザイナーの有効化

Visual Studio Express 2013 for Web をインストールして使用していたら aspx の編集でデザインビューが表示されなくなっていました。aspx のソースのみでページを作成するのはつらいのでオプションを調べていたら「HTMLデザイナーを有効にする」チェックボックスが選択されていないのを発見!

Microsoft_Visual_Studio_Express_2013_for_Web

上記オプションを有効にして Visual Studio Express 2013 for Web を再起動したところ。

Microsoft_Visual_Studio_Express_2013_for_Web_designer

C# タイムゾーンによる日時変換(UTC->JST, JST->UTC)

日本時間(JST)を世界標準時間(UTC)へ変換したり、その反対の変換を行うためにはタイムゾーンによる変換方法を調べて試しました。

タイムゾーンは日本時間の場合は “Tokyo Standard Time” で TimeZoneInfo が取得できます。参考までに他のタイムゾーンも列挙してみました。

using System;

namespace TZTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string date = "2013-02-07 12:13:00";   // テスト用の日時
            DateTime jst = DateTime.Parse(date);    // ローカル日時
            DateTime utc = jst.ToUniversalTime();   // UTC へ変換
            Console.WriteLine("JST: " + jst.ToString("G") + " -> UTC: " + utc.ToString("G"));

            // タイムゾーンを指定してUTCからJSTへ変換
            TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time");
            DateTime jst2 = TimeZoneInfo.ConvertTimeFromUtc(utc, tzi);
            Console.WriteLine("UTC: " + utc.ToString("G") + " -> JST: " + jst2.ToString("G"));

            // タイムゾーンIDの列挙
            var infos = TimeZoneInfo.GetSystemTimeZones();
            foreach (var info in infos)
            {
                Console.WriteLine(info.Id);
            }        
        }
    }
}

出力結果:

JST: 2013/02/07 12:13:00 -> UTC: 2013/02/07 3:13:00
UTC: 2013/02/07 3:13:00 -> JST: 2013/02/07 12:13:00

Dateline Standard Time
UTC-11
Hawaiian Standard Time
Alaskan Standard Time
Pacific Standard Time (Mexico)
Pacific Standard Time
US Mountain Standard Time
Mountain Standard Time (Mexico)
Mexico Standard Time 2
Mountain Standard Time
Central Standard Time (Mexico)
Mexico Standard Time
Canada Central Standard Time
Central America Standard Time
Central Standard Time
US Eastern Standard Time
SA Pacific Standard Time
Eastern Standard Time
Venezuela Standard Time
Paraguay Standard Time
Central Brazilian Standard Time
Pacific SA Standard Time
SA Western Standard Time
Atlantic Standard Time
Newfoundland Standard Time
SA Eastern Standard Time
Greenland Standard Time
Bahia Standard Time
Argentina Standard Time
E. South America Standard Time
Montevideo Standard Time
Mid-Atlantic Standard Time
UTC-02
Azores Standard Time
Cape Verde Standard Time
Morocco Standard Time
GMT Standard Time
Greenwich Standard Time
UTC
W. Europe Standard Time
Namibia Standard Time
Central European Standard Time
Romance Standard Time
Central Europe Standard Time
W. Central Africa Standard Time
GTB Standard Time
Turkey Standard Time
Israel Standard Time
Egypt Standard Time
Syria Standard Time
South Africa Standard Time
FLE Standard Time
Middle East Standard Time
E. Europe Standard Time
Jordan Standard Time
Kaliningrad Standard Time
Arab Standard Time
E. Africa Standard Time
Arabic Standard Time
Iran Standard Time
Arabian Standard Time
Armenian Standard Time
Caucasus Standard Time
Georgian Standard Time
Azerbaijan Standard Time
Mauritius Standard Time
Russian Standard Time
Afghanistan Standard Time
Pakistan Standard Time
West Asia Standard Time
Sri Lanka Standard Time
India Standard Time
Nepal Standard Time
Central Asia Standard Time
Ekaterinburg Standard Time
Bangladesh Standard Time
Myanmar Standard Time
N. Central Asia Standard Time
SE Asia Standard Time
Ulaanbaatar Standard Time
Singapore Standard Time
North Asia Standard Time
W. Australia Standard Time
China Standard Time
Taipei Standard Time
North Asia East Standard Time
Korea Standard Time
Tokyo Standard Time
Cen. Australia Standard Time
AUS Central Standard Time
AUS Eastern Standard Time
West Pacific Standard Time
E. Australia Standard Time
Tasmania Standard Time
Yakutsk Standard Time
Vladivostok Standard Time
Central Pacific Standard Time
New Zealand Standard Time
Fiji Standard Time
Kamchatka Standard Time
Magadan Standard Time
UTC+12
Samoa Standard Time
Tonga Standard Time

C#でフルパス名からディレクトリ名、ファイル名、拡張子に分割

C# でファイルを扱っていて、フルパス名からディレクトリ名、ファイル名、拡張子に分割する方法をいくつか試してみました。

using System;
using System.IO;

namespace splitpath
{
    class Program
    {
        static void Main(string[] args)
        {
            string fullpath = @"C:\Documents and Settings\username\My Documents\Worktest.txt";

            Console.WriteLine("string.Splitで分割:");
            char[] seps = { Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar };
            string[] paths = fullpath.Split(seps);
            foreach (string path in paths)
            {
                Console.WriteLine(path);
            }

            Console.WriteLine("Path.Combineで連結");
            Console.WriteLine(Path.Combine(paths));
            Console.WriteLine("↑ドライブ文字の直後には" + Path.DirectorySeparatorChar + "が付加されない。");

            Console.WriteLine("Path.GetPathRoot: " + Path.GetPathRoot(fullpath));
            Console.WriteLine("Path.GetDirectoryName: " + Path.GetDirectoryName(fullpath));
            Console.WriteLine("Path.GetFileName: " + Path.GetFileName(fullpath));
            Console.WriteLine("Path.GetFileNameWithoutExtension: " + Path.GetFileNameWithoutExtension(fullpath));
            Console.WriteLine("Path.GetExtension: " + Path.GetExtension(fullpath));
        }
    }
}

実行結果:

string.Splitで分割:
C:
Documents and Settings
username
My Documents
Work
test.txt
Path.Combineで連結
C:Documents and Settings\username\My Documents\Worktest.txt
↑Path.Combineで連結してもドライブ文字の直後にはが付加されない。
Path.GetPathRoot: C:
Path.GetDirectoryName: C:Documents and SettingsusernameMy DocumentsWork
Path.GetFileName: test.txt
Path.GetFileNameWithoutExtension: test
Path.GetExtension: .txt

C#でCSVファイルをDataTableへ読み込む

C# で CSVファイルを読み込んでデータテーブル(DataTable)へ格納するサンプルを作成しました。VisualStudio 2010 で動作確認しています。

using System;
using System.IO;
using System.Data;

namespace CSVTest
{
    class CSVImporter
    {
        static void Main(string[] args)
        {
            CSVImporter csvimporter = new CSVImporter();

            if (args.Length > 0 && !File.Exists(args[0]))
            {
                return;
            }

            // CSVファイルの読み込み
            DataTable dt = csvimporter.ImportCSVToDataTable(args[0], ',', false);

            // 読み込んだCSVを確認
            DataRow[] rows = dt.Select();

            for (int i = 0; i < rows.Length; i++)
            {
                string s = string.Empty;
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    s += rows[i][j];
                    if (j 
0) { string[] fields = csvRows[0].Split(delim); // DataTable 列の作成 for (int i = 0; i < fields.GetLength(0); i++) { if (is1stRowHeader) { // 先頭行をヘッダーとして使用 dt.Columns.Add(fields[i], typeof(string)); } else { dt.Columns.Add(); } } // CSVデータをDataTableへ読み込む int firstDataRow = is1stRowHeader ? 1 : 0; for (int i = firstDataRow; i < csvRows.GetLength(0); i++) { fields = csvRows[i].Split(delim); DataRow row = dt.NewRow(); row.ItemArray = fields; dt.Rows.Add(row); } } return dt; } } }