困ったー

WIN10・アプリ・ゲームで困ったことを調べてみた

「こまったー」は困ったことを調べたブログです。

オキュラスクエスト2 |  ARK |  フォートナイト |  マイクラ |  サティスファクトリー | 

スポンサーリンク


【Visual Studio 2019】C#でファイルを扱うには?利用するツールボックスは?

◆Paypayならチャージだけでマイナポイント最大5000円還元( アイフォン(iOS) | アンドロイド)

C#でのファイルの取り扱い方についてまとめていきます。

ファイルを扱うプログラミング 

William and Holly in Westlake

Visual Studio 2019を使っていて面倒なので調べたことなどをまとめていきます。

 

ファイルを読み込む

ファイルを読むには「System.IO.StreamReader」を使います。

ファイル名と文字エンコードの種類をしてからファイルを読み込みます。

 

String fileName = @"c:\_work\sample.txt";
System.IO.StreamReader sr = new System.IO.StreamReader(fileName, 
System.Text.Encoding.GetEncoding("shift_jis"));
String s = sr.ReadToEnd();
sr.Close();

 

  

iniファイルを使う

プログラムを作る場合、設定の一部をiniファイルのように外部ファイルにしておくと後々の変更が楽です。

 

C#の場合、WinAPIからGetPrivateProfileStringを利用可能にします。

[System.Runtime.InteropServices.DllImport("kernel32.dll")]
private static extern int GetPrivateProfileString(
string lpApplicationName,
string lpKeyName,
string lpDefault,
StringBuilder lpReturnedstring,
int nSize,
string lpFileName);

 

あとはセクション名、キー、初期値、iniファイルのパスを渡して値を読み込むことができます。

public string GetValue(string section, string key, string defaultvalue, string filePath)
{
StringBuilder sb = new StringBuilder(256);
GetPrivateProfileString(section, key, defaultvalue, sb, sb.Capacity, filePath);
return sb.ToString();
}

 

iniファイルは以下のように記述します。

[]がセクション名です。gameセクションのgameModeの値を取得すると「test」とかえってきます。先頭に#をつけると、その行は無視されます。

[game]
gameMode=test
full=0
debug=0
# buffer=1000

 

iniファイル自体はプロジェクトへ組み込んで置き、プロパティで「出力ディレクトリにコピー」から「常にコピー」まはた「新しい場合コピー」にしておきます。

これでプロジェクト内のiniファイルを編集すると、ビルド後のバージョンでもそれと同じ内容のiniファイルが使えるようになります。

f:id:apicode:20190730105725p:plain

 

 

ファイルダイアログを利用する

ツールボックスにファイル用のツールがあります。

それを利用すると、ウィンドウズで標準的なファイルのオープン・セーブのインタフェースを利用できます。

f:id:apicode:20200821093833p:plain

 

プログラムはまず「OpenFileDialog 」オブジェクトを作成。

最初に開く場所(InitialDirectory )、ファイルの拡張子のフィルター(Filter)、ダイアログの名(Title)などを指定してから実行。

結果がOKなら指定されたファイルパスを取得という流れになります。

private void videoOpenDlog()
{
 OpenFileDialog ofd = new OpenFileDialog()
 {

  InitialDirectory = System.Environment.GetFolderPath(Environment.SpecialFolder.CommonVideos),
 Filter = "Video file(*.avi;*.mp4;*.mov)|*.avi;*.mp4;*.mov|All file(*.*)|*.*",
 FilterIndex = 0,
 Title = "Select a video"
};


 if (ofd.ShowDialog() == DialogResult.OK)
 {
  videoOpen(ofd.FileName);

 }
}

 

ファイルを選択する OpenFileDialog

ファイルを開くときに使うダイアログです。

対応拡張子を指定することもできます。 

f:id:apicode:20191205191903p:plain

 

 

フォルダを選択 FolderBrowserDialog

ファイルではなくフォルダーを選択させるためのダイアログです。

画像を出力するためのフォルダを選んだりといった使い方ができます。

f:id:apicode:20191205134912p:plain

 

ファイルを保存する SaveFileDialog

ファイルを保存するときのダイアログです。ファイルを開くダイアログに似てますが、こちらは「保存」ボタンとなります。

f:id:apicode:20191205191939p:plain

 

まずSaveFileDialog オブジェクトを作成。

ファイル名(FileName)、最初に開くディレクトリ(InitialDirectory )、拡張子(Filter )、ダイアログ名(Title)などを指定します。

ShowDialog() が実行されてOKだったら、「sfd.FileName」でパスを取得できます。

SaveFileDialog sfd = new SaveFileDialog()
{

 FileName = "temp.jpg",
 InitialDirectory = System.Environment.GetFolderPath(Environment.SpecialFolder.MyPictures),
 Filter = "JPEG(*.jpg)|*.jpg",
 FilterIndex = 0,
 Title = "Create jpg file",
 RestoreDirectory = true
};

if (sfd.ShowDialog() == DialogResult.OK)
{
 pictureBox1.Image.Save(sfd.FileName, System.Drawing.Imaging.ImageFormat.Jpeg);
}

 

 

 

ファイルの不具合

ファイルの読み込みがうまくいない?

ファイルの読み込みは、「ファイルのパス名が違う」「ファイルが破損等で読み込めない」 などのエラーが起きやすいです。

 

そこでtry、catch型の構文を使って、エラーが起きた時の処理を書いたり、最終的には開いたファイルをちゃんとクローズするといった処理を書けるようにしましょう。

 

 

 String fileName = @"c:\_work\sample.txt";
System.IO.StreamReader sr = new System.IO.StreamReader(fileName, 
System.Text.Encoding.GetEncoding("shift_jis"));
try{ String s = sr.ReadToEnd();
 }
catch (Exception)
{
MessageBox.Show("エラー!");
}
finally
{
if (sr != null)
{
sr.Close();
}
}

 

このブログは、ネットや書籍上の情報、個人の体験や感想を中心にまとめたものです。 正確性を期していはいますが、間違い・誤訳等あるかもしれません。 当サイトの情報によって生じたいかなる損失について一切の責任を負わないものとします. あらかじめご了承ください。

利用規約・プライバシーポリシー |〇問い合わせ