質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ダイアログ

ユーザーにウィンドウやボックス等の形で個別で表示されるフォームであり、ユーザーに判断を促す目的で表示される。ユーザーが見逃す事のないよう、操作中のフォーム上にポップアップして表示される。

パス

パス(path)はファイルシステムの場所(階層)を明示したものです。

Q&A

解決済

3回答

3042閲覧

C# ダイアログ選択パスの受け渡し

sr3fecoo7

総合スコア7

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ダイアログ

ユーザーにウィンドウやボックス等の形で個別で表示されるフォームであり、ユーザーに判断を促す目的で表示される。ユーザーが見逃す事のないよう、操作中のフォーム上にポップアップして表示される。

パス

パス(path)はファイルシステムの場所(階層)を明示したものです。

0グッド

1クリップ

投稿2018/04/30 02:50

編集2018/04/30 04:50

前提・実現したいこと

ダイアログでcsvファイルを任意の場所・名前で保存したいです。

Fnc_Aでダイアログを開き、Fnc_Bでファイルを保存。

発生している問題・エラーメッセージ

Fnc_Aで取得したファイルパスを「PATH_FILE」に代入し残しておき、後で別の処理に使用したいのですが、パラメータの定義の仕方などが今一つ理解できておりません。

ローカル変数となっている「PATH_FILE」をグローバル変数としたいのですが、
どうすればよいのでしょうか?

該当のソースコード

C#

1 2// ファイルパスの初期値 3public string PATH_FILE = ""; 4 5// 保存ダイアログ 6public void Fnc_A() 7{ 8 var sfd = new SaveFileDialog 9 { 10 FileName = "BookList.csv", 11 InitialDirectory = @"C:\", 12 Filter = "csvファイル(*.csv)|*.csv", 13 Title = "保存先のファイルを選択してください", 14 RestoreDirectory = true 15 }; 16 17 // ダイアログを表示 18 if (sfd.ShowDialog() == true) 19 { 20 // ファイルパス取得 21 var PATH_FILE = sfd.FileName; 22 23 // ファイル書き込み 24 Fnc_B(); 25 } 26} 27 28// ファイル書き込み 29public void Fnc_B() 30{ 31 // 入力値を取得 32 var w_title = ""; 33 var w_author = ""; 34 var w_publisher = ""; 35 var w_num = ""; 36 var w_input = ""; 37 38 // 書き込み用リスト作成 39 var List_W = new List_Write(w_title, w_author, w_publisher, w_num, w_input); 40 41 var w_path = PATH_FILE; 42 var w_encode = Encoding.GetEncoding("Unicode"); 43 44 FileInfo myCSVFile = new FileInfo(w_path); 45 46 using (var sw = new StreamWriter(w_path, true, w_encode)) 47 { 48 sw.WriteLine("{0},{1},{2},{3},{4}" 49 , w_title, w_author, w_publisher, w_num, w_input); 50 } 51}

試したこと

C#

1public void Fnc_A() 2{ 3 Fnc_B(PATH_FILE); 4} 5public void Fnc_B(string path_file) 6{ 7 var w_path = path_file; 8}

と引数として渡せば、Fnc_A⇒Fnc_Bはできますが、
Fnc_A⇒Fnc_B⇒Fnc_Bはできません。

(追記)
Fnc_A⇒Fnc_B ダイアログ表示選択⇒ファイル作成 (Fnc_Aを実行)では取得したパスが通りますが、
Fnc_A⇒Fnc_B⇒Fnc_B ダイアログ表示選択⇒ファイル作成の後にファイル上書きをするとき (Fnc_Aを実行後にFnc_Bを単体で実行) では取得したはずのパスが残っておらず、エラーになります。

補足情報(FW/ツールのバージョンなど)

VisualStudio2017

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2018/04/30 03:58

> Fnc_A⇒Fnc_Bはできますが、 Fnc_A⇒Fnc_B⇒Fnc_Bはできません。 この部分を日本語でわかりやすく書いてください。
guest

回答3

0

意図を理解してないかもしれないので的はずれな回答ならすいません

csharp

1 // ダイアログを表示 2 if (sfd.ShowDialog() == true) 3 { 4 // ファイルパス取得 5 var PATH_FILE = sfd.FileName; 6 7 // ファイル書き込み 8 Fnc_B(); 9 }

こちらのコードの
var PATH_FILE = sfd.FileName;
varを消して
PATH_FILE = sfd.FileName;
としてください。varがついてると同じ変数名で新しく宣言してしまっています

投稿2018/04/30 04:31

MMashiro

総合スコア2378

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sr3fecoo7

2018/04/30 04:44

>varがついてると同じ変数名で新しく宣言してしまっています ありがとうございます。 ご指摘の通りで無事に動作しました。
guest

0

関数の外で、string PATH_FILE; と書いとけばいいです


と引数として渡せば、Fnc_A⇒Fnc_Bはできますが、

Fnc_A⇒Fnc_B⇒Fnc_Bはできません。

なら関数の戻り値をvoidじゃなくてstringにして、加工した結果を返せばいいかと

投稿2018/04/30 02:59

編集2018/04/30 04:00
y_waiwai

総合スコア87747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2018/04/30 03:31

メソッド外で既に宣言されています。 // ファイルパスの初期値 public string PATH_FILE = "";
guest

0

自己解決

MMashiro 様のご指摘の通り、
varで新たに変数を宣言していたことが原因でした。

var PATH_FILE = sfd.FileName;
のvarを消して
PATH_FILE = sfd.FileName;
としました。

投稿2018/04/30 04:52

編集2018/04/30 04:53
sr3fecoo7

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2018/04/30 04:54

この場合は自己解決でなく最も役立った回答をベストアンサーにしてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問