C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[9]: 変数を用いたファイルの指定


(過去ログ 26 を表示中)

[トピック内 13 記事 (1 - 13 表示)]  << 0 >>

■11903 / inTopicNo.1)  変数を用いたファイルの指定
  
□投稿者/ taku (8回)-(2007/12/24(Mon) 17:35:51)

分類:[C#] 

C#,VS2005pro

いつもお世話になっています。

System.IO.File.ExistsメソッドやStreamReaderメソッドを使用する際、
ファイル名を指定する部分にファイル名を代入している変数を利用したいのですがどのようにすればよいのでしょうか?

Ex)
string fileName = "C:\Hoge.txt";

System.IO.StreamReader hReader = (
        new System.IO.StreamReader(@fileName, System.Text.Encoding.Default)
    );

こんなコードだとうまくいきません。回答よろしくお願いします。

引用返信 編集キー/
■11904 / inTopicNo.2)  Re[1]: 変数を用いたファイルの指定
□投稿者/ επιστημη (747回)-(2007/12/24(Mon) 18:00:15)
επιστημη さんの Web サイト
string fileName = @"C:\Hoge.txt";
System.IO.StreamReader hReader = (
new System.IO.StreamReader(fileName, System.Text.Encoding.Default)
);

こんなコードだとどぉでしょう。

引用返信 編集キー/
■11907 / inTopicNo.3)  Re[2]: 変数を用いたファイルの指定
□投稿者/ taku (9回)-(2007/12/24(Mon) 19:32:56)
> string fileName = @"C:\Hoge.txt";
> System.IO.StreamReader hReader = (
>          new System.IO.StreamReader(fileName, System.Text.Encoding.Default)
>      );
>  
> こんなコードだとどぉでしょう。

申し訳ありません、自己判断で状況を簡略化しすぎて、示していただいたコードを適用できませんでした。
実際には、「1度System.Windows.Forms.Application.StartupPathメソッドを利用してファイルに出力したパスを読み込んで、
そのファイルにテキストを保存する」という動作をさせたいのですが、いい方法はあるでしょうか?

            string temp;
           
            using(StreamWriter w1 = new StreamWriter(@"hoge1.ini"))
            {
                w1.WriteLine(System.Windows.Forms.Application.StartupPath + @"\hoge2.txt");
            }

            System.IO.StreamReader hReader = (
                new System.IO.StreamReader(@"hoge1.ini", System.Text.Encoding.Default)
            );

            temp = hReader.ReadToEnd();

            hReader.Close();

            using(StreamWriter w2 = new StreamWriter(temp))
            {
                w2.WriteLine(textBox1.Text);
            }

現在のコードはこのような感じです

引用返信 編集キー/
■11908 / inTopicNo.4)  Re[3]: 変数を用いたファイルの指定
□投稿者/ επιστημη (749回)-(2007/12/24(Mon) 19:50:49)
επιστημη さんの Web サイト
2007/12/24(Mon) 19:58:09 編集(投稿者)

> ...
> 現在のコードはこのような感じです

で、これのどこがどのようにマズいのですか?

- 書きたいものが書けていますか?
- 正しく読み込めていますか? (tempの内容は期待したものですか?


引用返信 編集キー/
■11910 / inTopicNo.5)  Re[4]: 変数を用いたファイルの指定
□投稿者/ taku (10回)-(2007/12/24(Mon) 20:13:30)
>>...
>>現在のコードはこのような感じです
>
> で、これのどこがどのようにマズいのですか?
失礼しました。
このコードだと
using(StreamWriter w2 = new StreamWriter(temp))の部分で
「パスに無効な文字が含まれています。」と出て実行が停止してしまいます。

> - 書きたいものが書けていますか?
> - 正しく読み込めていますか? (tempの内容は期待したものですか?
tempの内容を表示させてみたところ、「\」以下が文字化けしています。

w1.WriteLine(System.Windows.Forms.Application.StartupPath + @"\hoge2.txt");を
w1.WriteLine(@+"\u0022"+System.Windows.Forms.Application.StartupPath + @"\hoge2.txt"+"\u0022");
にしてみたり「¥」を「\\」に置換してみたりもしましたがダメでした。

引用返信 編集キー/
■11912 / inTopicNo.6)  Re[5]: 変数を用いたファイルの指定
□投稿者/ επιστημη (750回)-(2007/12/24(Mon) 20:30:26)
επιστημη さんの Web サイト
>>- 正しく読み込めていますか? (tempの内容は期待したものですか?
> tempの内容を表示させてみたところ、「\」以下が文字化けしています。

文字化けではなく、余計な改行("\r\n")が付いてるんじゃありませんか?

temp = hReader.ReadToEnd();
コレを
temp = hReader.ReadLine();
にとっかえるだけで動きそうです。

# 何故そんなことになったのか、考えましょうね


引用返信 編集キー/
■11913 / inTopicNo.7)  Re[5]: 変数を用いたファイルの指定
□投稿者/ やじゅ (37回)-(2007/12/24(Mon) 20:40:13)
やじゅ さんの Web サイト
2007/12/24(Mon) 21:02:37 編集(投稿者)
2007/12/24(Mon) 20:57:17 編集(投稿者)

No11910 (taku さん) に返信
>
> w1.WriteLine(System.Windows.Forms.Application.StartupPath + @"\hoge2.txt");を
> w1.WriteLine(@+"\u0022"+System.Windows.Forms.Application.StartupPath + @"\hoge2.txt"+"\u0022");
> にしてみたり「¥」を「\\」に置換してみたりもしましたがダメでした。
>

これでは?
w1.WriteLine(System.Windows.Forms.Application.StartupPath + "\\hoge2.txt");

@は関係ないのね、えーと、StartupPathを違うのに変更したら動くのか確かめた方が
いいかな、それで動くならStartupPathのフォルダ名に問題あり。

私は検討違いな回答してるようなので、無視してください(^^;
引用返信 編集キー/
■11914 / inTopicNo.8)  Re[6]: 変数を用いたファイルの指定
□投稿者/ επιστημη (751回)-(2007/12/24(Mon) 20:46:04)
επιστημη さんの Web サイト
> これでは?
> w1.WriteLine(System.Windows.Forms.Application.StartupPath + "\\hoge2.txt");

ここでWriteLineすなわち改行付きで出力したものを
temp = hReader.ReadToEnd(); してっから、末尾に改行"\r\n"がくっついてる。

引用返信 編集キー/
■11915 / inTopicNo.9)  Re[6]: 変数を用いたファイルの指定
□投稿者/ taku (11回)-(2007/12/24(Mon) 23:15:48)
επιστημη さん
> >>- 正しく読み込めていますか? (tempの内容は期待したものですか?
>>tempの内容を表示させてみたところ、「\」以下が文字化けしています。
>
> 文字化けではなく、余計な改行("\r\n")が付いてるんじゃありませんか?
>
> temp = hReader.ReadToEnd();
> コレを
> temp = hReader.ReadLine();
> にとっかえるだけで動きそうです。

ん〜・・・変わりませんねtempの内容を表示させると C:Program Files\ほげ\hoge.txt => C:Program Files\縺サ縺篳hoge.txt
となり、うまくいきません

やじゅ さん
>@は関係ないのね、えーと、StartupPathを違うのに変更したら動くのか確かめた方が
>いいかな、それで動くならStartupPathのフォルダ名に問題あり。
ビンゴです^^C:Program Files\hoge\hoge.txt ならうまくいきました。

ということでパスがすべてアルファベットじゃないといけないことはわかりましたが、それじゃ意味ないんだよなぁorz
引用返信 編集キー/
■11916 / inTopicNo.10)  Re[7]: 変数を用いたファイルの指定
□投稿者/ επιστημη (752回)-(2007/12/24(Mon) 23:18:39)
επιστημη さんの Web サイト
> ん〜・・・変わりませんねtempの内容を表示させると C:Program Files\ほげ\hoge.txt => C:Program Files\縺サ縺篳hoge.txt
> となり、うまくいきません

だとすると、書き込み時と読み込み時のencodingが合ってないんちゃうか?

引用返信 編集キー/
■11919 / inTopicNo.11)  Re[7]: 変数を用いたファイルの指定
□投稿者/ 魔界の仮面弁士 (554回)-(2007/12/25(Tue) 09:11:20)
No11915 (taku さん) に返信
> C:Program Files\ほげ\hoge.txt => C:Program Files\縺サ縺篳hoge.txt

その化け方は、「UTF-8 エンコードで保存されたテキストファイル」を
「Shift_JIS のテキストファイルとして読み込んだ場合」の化け方ですね。
引用返信 編集キー/
■11922 / inTopicNo.12)  Re[8]: 変数を用いたファイルの指定
□投稿者/ επιστημη (753回)-(2007/12/25(Tue) 09:59:30)
επιστημη さんの Web サイト
No11919 (魔界の仮面弁士 さん) に返信
> その化け方は、「UTF-8 エンコードで保存されたテキストファイル」を
> 「Shift_JIS のテキストファイルとして読み込んだ場合」の化け方ですね。

とすると、↓のSystem.Text.Encoding.Default = Shift_JIS てことか。
new System.IO.StreamReader(@"hoge1.ini", System.Text.Encoding.Default)

encodingを指定しなけりゃUTF-8ですよね? それで解決かな。

引用返信 編集キー/
■11934 / inTopicNo.13)  Re[9]: 変数を用いたファイルの指定
□投稿者/ taku (12回)-(2007/12/25(Tue) 19:45:27)
> encodingを指定しなけりゃUTF-8ですよね? それで解決かな。
うまくいきました!関わってくれた皆さん、ありがとうございました!

なるほど、意味を深く考えずにティップスをそのままコピーしたのがいけなかったんですね。
以後気をつけます;ありがとうございました!
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -