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

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

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

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Q&A

解決済

2回答

1637閲覧

C#にて文字列を返値にしたが返ってこない。

doro-ro

総合スコア12

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

0グッド

0クリップ

投稿2020/08/06 10:47

前提・実現したいこと

C#にてxmlファイルをコピー後、textファイルに変更してその後さまざまな処理をしたいと考えてます。
質問したい部分は、ファイル操作を行うクラスを作り、新しいファイルのディレクトリを返すようにしたいです。

発生している問題

新しいファイルのディレクトリを変数へ代入したいのですが、変数の中が空っぽになってしまいます。具体的にはMain部分の

ChgDir = o_test.TestCreate(Path);

この部分の『ChgDir』が空になってしまいます。

該当のソースコード

Main

1class Program 2 { 3 static void Main() 4 { 5 string Path = @"C:\Users\ユーザー\Desktop\target.xml"; 6 string ChgDir; 7 8 TestClass o_test = new TestClass(); 9 ChgDir = o_test.TestCreate(Path); 10 11 //ChgDirを使って処理 12 } 13 } 14

TestClass

1class TestClass 2 { 3 public string TestCreate(string path) 4 { 5 string TestText = "test"; 6 string TextExt = String.Concat(".", "txt"); 7 8 // 元パスから親ディレクトリ,ファイル名取得、コピーファイル名,tempファイル名作成 9 string ParDir = Path.GetDirectoryName(path); 10 string orgFileName = Path.GetFileName(path); 11 string copyTextFileName = string.Concat(TestText, orgFileName); 12 13 // txtファイルへ拡張子変更 14 string testFileName = Path.ChangeExtension(copyTextFileName, TextExt); 15 16 // 各ディレクトリ 17 string copyFileDir = Path.Combine(ParDir, copyTextFileName); 18 string testFileDir = Path.Combine(ParDir, testFileName); 19 20 // 元ファイルをコピーしリネーム 21 File.Copy(path, copyFileDir); 22 File.Move(copyFileDir, testFileDir); 23 24 return testFileDir; 25 } 26 } 27

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

Win10
Visual Studio 2010

初歩的な質問かもしれませんが、よろしくお願いします。

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

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

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

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

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

Zuishin

2020/08/06 10:54

空になりません。
guest

回答2

0

ベストアンサー

もしかして実際のコードはtry/catchで囲っていてせんか?

C#

1TestClass o_test = new TestClass(); 2try 3{ 4 ChgDir = o_test.TestCreate(Path); 5} 6catch 7{ 8 //エラー処理 9}
  1. C:\Users\ユーザー\Desktop\target.xmlが無い
  2. C:\Users\ユーザー\Desktop\testtarget.xmlが有る
  3. C:\Users\ユーザー\Desktop\testtarget.txtが有る(2回目以降の実行)

などの場合、File.CopyFile.Moveで例外が発生し空になりますが…


ChgDir = o_test.TestCreate(Path);

の後に
Console.WriteLine(ChgDir);
を追加したらちゃんと追加されていました。

矢印のある行は次に実行される行です。
ChgDir = o_test.TestCreate(Path);の行を実行しないと格納されませんよ。

投稿2020/08/06 18:42

編集2020/08/07 06:24
SHOMI

総合スコア4079

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

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

doro-ro

2020/08/07 05:15

try/catchは使用していません。 例外ではなかったようです。 ChgDir = o_test.TestCreate(Path); の後に Console.WriteLine(ChgDir); を追加したらちゃんと追加されていました。 追加せずウォッチで確認した際は、何もない状態だったのですが。。。 使用するようにしないとウォッチでは見れない仕様なんでしょうか?
YAmaGNZ

2020/08/07 05:19

もしかして、 ChgDir = o_test.TestCreate(Path); の行が黄色に反転しているの時(もしくはブレイクポイントに設定して止まった時)に見ていたのではないですか? その状態の時はまだその行は実行されていません。 よってChgDirに代入される前に値を確認したことになります。
Zuishin

2020/08/07 05:20

> ChgDir = o_test.TestCreate(Path); が実行される前に見たからです。
SHOMI

2020/08/07 06:20

>Console.WriteLine(ChgDir); >を追加したらちゃんと追加されていました。 実行前に見ているだけですね。 矢印のある行はまだ実行されていませんよ。
doro-ro

2020/08/07 07:09 編集

>ChgDir = o_test.TestCreate(Path); >の行が黄色に反転しているの時(もしくはブレイクポイントに設定して止まった時)に見ていたのではないですか? 確実に黄色反転が過ぎたところで確認しましたが何も入っていない状態でした。 正確には、ウォッチの“値”の欄に --- 名前‘ChgDir’は現在のコンテキスト内に存在しません。 --- と表示されます。 また下記のように ChgDir = o_test.TestCreate(Path); Console.WriteLine(”1”); のようにし『1』がコンソールに表示された時点でウォッチを確認しましたが 同様に表示されませんでした。
Zuishin

2020/08/07 07:11

現在のコンテキストに存在しなかったなら、それは空ではありません。空というのは存在していてなおかつ有効な値が入っていないことを言います。存在していなかったのであれば、ウォッチ式の書き方を間違えただけというのが一番可能性が高いと思います。
SHOMI

2020/08/07 07:20 編集

もしくはChgDirを宣言したブロックを抜けた後にブレークして見たかですね。
guest

0

VisualStudioを使ってるなら、デバッグ機能を使って1行づつ実行させてみて、変数の中身を見てみたらどうでしょうか。
なにがおかしいかわかりますよ

投稿2020/08/06 10:53

y_waiwai

総合スコア88042

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問