としおの読書生活

田舎に住む社会人の読書記録を綴ります。 主に小説や新書の内容紹介と感想を書きます。 読書の他にもワイン、紅茶、パソコン関係などの趣味を詰め込んだブログにしたいです。

カテゴリ: PC

3753817_s

本記事ではVisual Studioを使ってWPFの開発環境を構築する方法を紹介していきます。



Visual Studioのダウンロード


最初にVisual Studioをインストールします。

すでにインストール済みの人は読み飛ばしてもらっても大丈夫です。

Visual Studioは以下のリンクからダウンロードできます。



コミュニティ版は学生、個人利用者、オープンソース貢献者は無償で使用できるみたいです。マイクロソフトは心が広いですね。

以下の画面の赤で囲まれている部分をクリックすることでダウンロードすることができます。

キャプチャ

ダウンロードが完了したらインストーラを起動してください。

インストーラを起動したら続行をクリックします。

キャプチャ

次に.NET デスクトップ環境にチェックを入れてインストールボタンをクリックしてください。

そうするとインストールが始まります。

キャプチャ

キャプチャ

インストールが完了すると一度PCの再起動を求められるので再起動してください。

キャプチャ

再起動がしたらデスクトップからメニューを開いてVの項目にあるVisual Studio2019を起動してください。

キャプチャ

起動するとマイクロソフトアカウントでのサインインが求められるのでサインインしてください。

アカウントがない場合は、アカウントを作成してください。

キャプチャ

サインインすると配色の設定が聞かれるので好みの色に設定してVisual Studioの開始をクリックします。

キャプチャ

以下の画面が起動したらVisual Studioが起動できたためインストールは完了です。

キャプチャ



WPFプロジェクトを作成する


Visual StudioがインストールできたろことでWPFのプロジェクトを作成していきます。

以下の画面から新しいプロジェクトの作成をクリックしてください。

キャプチャ

検索ボックスにWPFと入力して、以下の画像の赤枠で囲っているWPFアプリケーションを選択して次へをクリックしてください。

Visual Basic用などと間違えないように注意してください。

キャプチャ

プロジェクト名や場所は適当なものを入力して次へをクリックしてください。今回はデフォルトのままで進みます。

キャプチャ

ターゲットフレームワークもなんでもいいのですが今回は現時点で最新の5.0を使用します。

ターゲットフレームワークが選択できたら作成をクリックしてください。

キャプチャ

以下の画面が表示されたらWPFプロジェクトの作成は完了です。

キャプチャ





Hello Worldアプリを作成する


プロジェクトが作成できたら、ボタンを押したら画面にHello Worldと表示する単純なアプリを作成します。

ここではあくまでアプリを実行することを目的とするのでコードの意味などは説明しません。

MainWindow.xamlのコードを以下に示します。

<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid HorizontalAlignment="Center" VerticalAlignment="Center">
        <StackPanel>
            <Label x:Name="Label1" Margin="10" Height="40" Width="200" HorizontalContentAlignment="Center"/>
            <Button Content="ボタン" Height="40" Width="80" Click="Button_Click"/>
        </StackPanel>
    </Grid>
</Window>

MainWindow.xaml.csのコードを以下に示します。

using System.Windows;

namespace WpfApp1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Button_Click(object senderRoutedEventArgs e)
        {
            Label1.Content = "Hello World!!";
        }
    }
}

このコードを張り付けて、実行ボタンを押すとアプリが起動します。

キャプチャ

キャプチャ

ボタンをクリックすると画面中央にHello Worldと表示されます。

キャプチャ



まとめ


Visual StudioをインストールしてWPFでHello Worldアプリを作成するまで1時間ほどでできました。

関係ないですがいつの間にかホットリロード機能が付いたんですね!








3753817_s

C#で開発していてTEMP環境変数を取得する方法を調べたのでまとめます。



GetEnvironmentVariableを使う


C#では環境変数を取得する関数として、GetEnviromentVariableが用意されています。

この関数を使ってTEMP環境変数を取得するサンプルコードは以下の通りです。

string strTemp = Environment.GetEnvironmentVariable("TEMP");

この方法の欠点として一部の環境で、例外が発生する可能性があることです。

私もVisual Studio2017の.NET Framework 4.5.2の環境で上記の方法でTEMP環境変数を取得しようとしたろころ例外が発生しました。

コマンドプロンプトなどでTEMP環境変数が存在するか確認したところ存在していたので、環境変数の設定とかが悪いというわけではないようです。

そこで例外が発生しない方法を調べたところ以下の方法がいいことが分かりました。



GetTempPathを使う


GetEnviromentVariableで例外が発生した環境でGetTempPathを使用したところTEMP環境変数を取得することができました。

この関数を使ってTEMP環境変数を取得するサンプルコードは以下の通りです。

string strTemp = Path.GetTempPath();

調べていたら多くの方がTEMP環境変数を取得するためにこちらの関数を使った方が良いという意見をかかれていたため、今後使う機会があればこちらを使用していきたいと思いました。



まとめ


C#でTEMP環境変数を取得する方法は二種類ありましたが、GetTempPathを使用するのがいいみたいです。




3753817_s

今までVisual Studioをインストールしている環境でしか、C#をコンパイルしたことがなかったのですが、Visual Studioがない環境でもC#をコンパイルしたいと思い方法を調べました。

今回は、VSCodeを使ってコンパイルしていきます。



.NET Frameworkのパスと通す


C#をコンパイルするためには.NET Frameworkが必要です。

Windowsではデフォルトで.は.NET Frameworkはデフォルトでインストールされています。

C:\Windows\Microsoft.NETにアクセスするとFrameworkとFramework64がありそれぞれ32bit用と64bitようになります。

キャプチャ

今回は64bit用の「v4.0.30319」のパスを通していきます。

パスはコントロールパネル>システムとセキュリティ>システム>システムの詳細設定>環境変数 から通すことができます。

環境変数には「C:\Windows\Microsoft.NET\Framework64\v4.0.30319」を追加してください。



C#のプログラムをコンパイルする


パスが通せたところでC#のプログラムをVSCodeでコンパイルしていきましょう。

まずはVSCodeを起動して、コードが読みやすくなるように拡張機能をインストールしていきます。

拡張機能の検索ボックスで「C#」と入力して検索して、一番上に現れる拡張機能をインストールします。

キャプチャ

これでC#のコードが読みやすくなりました。

今回は、以下のサンプルコードをコンパイルします。

using System;

class Hello
{
    public static void Main()
    {
        Console.WriteLine("Hello World");
    }
}

ファイル名は何でもいいのですが、今回は「Hello.cs」としておきます。

コンパイルしたいC#のコードができたら、コードが置いているディレクトリにいどうしてターミナルに以下のコマンドを入力してください。

csc .\Hello.cs

これだけでコンパイルは完了です。

コンパイルが終わると実行ファイルができるはずなので実行してみるとターミナルに「Hello World」と表示されるはずです。



まとめ


C#をコンパイルするのは難しいと思っていたのですが、やってみたらむちゃくちゃ簡単でした。

本記事で分からないことがあればコメントをください。





先日、Windowsで初めてrobocopyコマンドを使ってファイルをコピーする機会がありました。

その際にファイルを速くコピーする方法を調べたので忘備録として記録します。



robocopyの基礎


robocopyコマンドはファイルサーバ同士の同期を目的に作られたコマンドです。

robocoyは「Roubust File Copy」の略で確実なファイルコピーという意味を持ちます。

FastCopyなどと違いWindowsに標準装備としてインストールされています。


ファイルをコピーす方法


robocopyでは以下のコマンドでファイルをコピーすることができます。

robocopy コピー元 コピー先



robocopyのオプション


robocopyのオプションはコマンドプロンプトで以下のコマンドを入力することで確認することができます。

robocopy /?

今回は、その中でも代表的なオプションをいくつか紹介します。

オプション説明
/MT[:n]n個のスレッドのマルチスレッドでコピーする。スレッドの数は1~128までの値
/MIR前回から更新のあったファイルだけコピーする。
/R:n失敗したコマンドに対してn回再試行する。
/W:n再試行と再試行の間にn秒待機時間を持たせる。
/NP進行状況を表示しない。

個人的に使ってみた感じ上記のオプションさえしっていれば基本的には困りませんでした。





ファイルを高速でコピーする


まずはオプションを変更してできる限りファイルを高速でコピーする方法を紹介します。

個人的に色々調べてみたところ以下のコマンドを使えばデフォルトでrobocopyコマンドを使うより、ファイルを速くコピーすることができました。

robocopy コピー元 コピー先 /MT:8 /MIR /R:1 /W:1 /NP

/Rや/Wオプションはデフォルト値が大きいのでかなり短くしています。

/MTオプションは環境によってチューニングが必要ですね。


今回、以下のようなディレクトリ構成で各フォルダに2KBのファイルを10000個ずつ入れて、コピーの毒度をrobocopyコマンドで計測してみました・

C:\TEST
├─1
├─10
├─2
├─3
├─4
├─5
├─6
├─7
├─8
└─9


計測結果は、24.0555624秒でした。


ちなみに上記でコピーしたフォルダにもう一度同じフォルダをコピーしてみようとしたところ、0.3133898秒で終わりました。

/MIRのオプションが有効に働いていますね。



startコマンドを使ってより早くしてみる


先ほどの計測結果よりも早くしようと思い調べてみたところ、startコマンドを使ったら早くなると書かれていたので試してみました。

一つのフォルダに対して一つのアプリケーションを起動してみます。

batファイルは以下になっています。

start robocopy C:\test\1 C:\test2\1 /MT:1 /MIR /R:1 /W:1 /NP
start robocopy C:\test\2 C:\test2\2 /MT:1 /MIR /R:1 /W:1 /NP
start robocopy C:\test\3 C:\test2\3 /MT:1 /MIR /R:1 /W:1 /NP
start robocopy C:\test\4 C:\test2\4 /MT:1 /MIR /R:1 /W:1 /NP
start robocopy C:\test\5 C:\test2\5 /MT:1 /MIR /R:1 /W:1 /NP
start robocopy C:\test\6 C:\test2\6 /MT:1 /MIR /R:1 /W:1 /NP
start robocopy C:\test\7 C:\test2\7 /MT:1 /MIR /R:1 /W:1 /NP
start robocopy C:\test\8 C:\test2\8 /MT:1 /MIR /R:1 /W:1 /NP
start robocopy C:\test\9 C:\test2\9 /MT:1 /MIR /R:1 /W:1 /NP
start robocopy C:\test\10 C\test2\10 /MT:1 /MIR /R:1 /W:1 /NP

計測結果は、24.476545でした。

あれ早くない!?スレッドの数とか調整したら早くなるのかな…。



まとめ


robocopyコマンドを使えばバックアップを速くできることが分かりました。

毎日や毎週のように短い頻度でバックアップをとっている場合、robocopyコマンドの/MIRオプションが有効に働くことも分かりました。

コピーコマンドで困った際は、ぜひrobocopyコマンドを使ってみてください。






バッチファイルを使って、試験に使用する大容量ファイルを作成してみました。



やりたいこと


今回は自分で作成したソフトの試験で10万行のファイルを読み込むという試験を行いたかったので、以下のようなファイルをバッチファイルで作成したかった。

abc
def
0123456789
0123456789
0123456789
0123456789
以下10万回『0123456789』が続く

ちなみにファイルの内容は、サンプル用の適当なものです。



ファイルに書き込む



上書き


以下のようにechoコマンドを使用して、出力したい内容とファイル名を指定することができます。

echo 出力したい内容> ファイル名

以下に上書きの場合のバッチファイルのサンプルを記しておきます。

バッチファイル
echo 123> ./test.txt 
echo 456> ./test.txt 

出力
456



追記


上書きから「>」の部分を「>>」に変更すると追記になります。

echo 出力したい内容>> ファイル名 

以下に追記の場合のバッチファイルのサンプルを記しておきます。

バッチファイル
echo 123>> ./test.txt 
echo 456>> ./test.txt

出力
123
456



for文


バッチファイルではfor文は以下のようにして書くことができます。

for /l %%変数 in (開始値,増減値,終了値) do (
    処理
)

これを先ほどのファイル出力のコマンドと組み合わせると以下のようになります。

バッチファイル
for /l %%i in (1,1,5) do (
    echo abc>> ./test.txt
)




試験用ファイルを作成する


先ほど説明したコマンドを組み合わせて、最初にやりたいことで示したファイルを作成してみます。

バッチファイル
rem 試験用ファイルを作成する
@echo off

echo abc>> ./test.txt
echo def>> ./test.txt
for /l %%i in (1,1,100000) do (
    echo 0123456789>> ./test.txt
)




まとめ


バッチファイルで試験用のファイルを作成してみましたが、コンパイルなどがいらないので単純なファイルを作るのには便利だなと思いました。



↑このページのトップヘ