C#ファイル名を変数で指定してオープンする方法

このQ&Aのポイント
  • C#でファイル名を変数で指定してオープンする方法について説明します。
  • StreamWriterを使用してファイルを書き込む場合、ファイル名を直接指定するのではなく、変数で指定することができます。
  • 具体的には、string型の変数にファイル名を格納し、その変数をStreamWriterの引数に渡すことで、指定したファイルをオープンすることができます。
回答を見る
  • ベストアンサー

C# ファイル名を指定してオープン

StreamWriter swrite = new StreamWriter("C:\\19yamana.csv",false, System.Text.Encoding.GetEncoding("shift-jis")); のファイル名"C:\\19yamana.csv"の部分を変数にしたいのですがうまく出来ません。 やったこと: string fileName = "C:\\19yamana.csv"; StreamWriter swrite = new StreamWriter(fileName, false, System.Text.Encoding.GetEncoding("shift-jis"));

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

こんにちは >>今回のエラーはメソッドの内側に書くべきコードをメソッドの外側に書いたから。 >うーー。この意味がわからないのです。 わかりにくいですね。具体的には、 今ある StreamWriter swrite = new StreamWriter(fileName, false, System.Text.Encoding.GetEncoding("shift-jis")); を、 StreamWriter swrite; swrite = new StreamWriter(fileName, false, System.Text.Encoding.GetEncoding("shift-jis")); に分解し、代入文の部分を、public Form1() 内に移動してください。 多分、コンパイルエラーが消えるはずです。 はずしていたらごめんなさい。

usatan2
質問者

お礼

回答ありがとうございます。 ご教示のとおり、分割して、後半をコンストラクタ内に移動したら、コンパイルエラーが消えました!! プログラムも想定したとおりの動きになりました。 まとめると、  ひとつの文でファイル名を直接書けばOK、  ファイル名を変数に分離するとエラー、  さらに2文に分割して、代入部をコンストラクタに移動すれば再びOK になるわけですね。 でも、なぜ、2番目の方法がエラーになるのか今ひとつ、釈然としません。 どなたかご存知の方いらっしゃいますでしょうか?

その他の回答 (3)

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.3

エラー一覧でF1キーを押すとヘルプが表示されます。 コンパイラ エラー CS0236 http://msdn.microsoft.com/ja-jp/library/5724t6za(v=vs.90).aspx 今回のエラーはメソッドの内側に書くべきコードをメソッドの外側に書いたから。

usatan2
質問者

お礼

回答ありがとうございます。 教えていただいたページは、ヘルプで見たページです。 再度このヘルプを見たのですが、どこをどのように修正したらよいのか、悲しいかな、やはりわかりません。 >今回のエラーはメソッドの内側に書くべきコードをメソッドの外側に書いたから。 うーー。この意味がわからないのです。 具体的に、どこをどのように修正したらよいのでしょうか。 よろしくお願いいたします。

  • samtomsan
  • ベストアンサー率55% (1060/1897)
回答No.2

文字コードの指定は何にしていますか。 下記ではどうでしょう。 string fileName = @"C:\19yamana.csv"; > にしたいのですがうまく出来ません どのようにうまくいかないのですか? エラーメッセージは? あとは一行ずつトレースして確認してみてください.

usatan2
質問者

お礼

回答ありがとうございます。 文字コードはシフトJISですが、ファイル名はアルファベットと数字だけなので、関係ない気がします。 string fileName = @"C:\19yamana.csv"; に変更しても同じエラー フィールド初期化子は、静的でないフィールド、メソッド、またはプロパティ"xxx.Form1.fileName"を参照できません になります。 >あとは一行ずつトレースして確認してみてください. コンパイルできませんので、トレースはできません。 エラーメッセージを読んでも、ヘルプしても、どこをどのように修正したらよいのかわかりません。

回答No.1

変数化の仕方は基本的に間違えていないと思います。 実際のソースのどこかに記述ミスとかないでしょうか?

usatan2
質問者

お礼

早速の回答ありがとうございます。 実際のソースからのコピペです。 フィールド初期化子は、静的でないフィールド、メソッド、またはプロパティ"xxx.Form1.fileName"を参照できません といったエラーが出ます。が意味不明で、何を修正したらよいのか分かりません。 よろしくお願いいたします。

関連するQ&A

  • C#からテキストファイルへの出力について

    お世話になります。 .NET C#で開発をしております。 下記のコードで、テキストファイルへ書き出す際、 何故か最初の1レコード目が書き出されない現象が 起きてしまいます。 どなたかご親切な方、ご教示頂きたく宜しくお願い致します。     記 public static int Syori() { string MitxtPath = @"D:\MData"; string SotxtPath = @"D:\SData"; for (int x = 0; x < 2; x++) { if (x == 0) { FileName = "\\JF01.txt"; } else if (x == 1) { FileName = "\\JS05.txt"; } FileStream fs = new FileStream(MitxtPath + FileName, FileMode.Open); StreamReader r = new StreamReader(fs, Encoding.GetEncoding("Shift_JIS")); if (r.ReadLine() != null) { StreamWriter textFile; textFile = new StreamWriter(SotxtPath + FileName, true, Encoding.GetEncoding("Shift_JIS")); //レコードを書き込む string ZanData; string newData; byte[] bytesData; while ((OkuriNokosi = r.ReadLine()) != null) { bytesData = System.Text.Encoding.GetEncoding(932).GetBytes(ZanData); newData = System.Text.Encoding.GetEncoding(932).GetString(bytesData); textFile.WriteLine(newData); } textFile.Close(); r.Close(); } }

  • C# 文字コード変換

    お世話になります。 宜しくお願いします。 C#でプログラムを開発しております。 その中で、文字列をShift-JISでテキストファイルへ書き出す という処理があるんですが 以下のように指定しても文字コードがUTF-8で書き出されているようです。 コードを調べましたが間違いが見つけられません。 どこか間違いはございますでしょうか。 ご教授宜しくお願いします。 ・文字コードを判別する場所 : http://encode-detector.uic.jp/tool ・テキストの形式 :ファイル名.DMD /////////////// 以下コード /////////////////////////     String param = "テキストへ書き込む内容";     System.IO.StreamWriter sw =          new System.IO.StreamWriter(             @"C:\hoge.DMD",              false,             System.Text.Encoding.GetEncoding("Shift_JIS") );     System.Text.Encoding src = System.Text.Encoding.UTF8;     System.Text.Encoding dest = System.Text.Encoding.GetEncoding("Shift_JIS");     byte[] temp = src.GetBytes(param);     byte[] sjis_temp = System.Text.Encoding.Convert(src, dest, temp);     param = dest.GetString(sjis_temp);     sw.Write(param);     sw.Close();

  • CSVファイルの出力に関して

    環境:Windows7 / VIsual Basic 2008 教えて下さい。 データベースの値を、CSVファイルとして出力する為に、以下のような記述を しましたが、どうしても下記のようなエラーとなってしまいます。 Cドライブの直下は記述すべきでなく、アクセス権がないのが原因かと思われますが、 なんとかCドライブの直下へ出力したいと考えています。 良い方法はないでしょうか? 《記述内容》  '保存先のCSVファイルのパス  Dim csvPath As String = "C:\ABC.csv"  'CSVファイルに書き込むときに使うEncoding  Dim enc As System.Text.Encoding = _  System.Text.Encoding.GetEncoding("Shift_JIS")  Try '開く Dim sr As New System.IO.StreamWriter(csvPath, False, enc)  Dim colCount As Integer = dtTable.Columns.Count   Dim lastColIndex As Integer = colCount - 1  以下省略・・・ 《エラー内容》  パス 'C:\ABC.csv' へのアクセスが拒否されました。 仮にアクセス権を付加するしか方法がないようであれば、申し訳ありませんが、 その方法も教えて頂ければと思います。 教えて下さい。 よろしくお願いします。

  • C#におけるファイル読み取りの文字化け

    開発初心者です。 //Shift-JISコードとして開く System.IO.StreamReader sr = new System.IO.StreamReader(@txtShiteiFile.Text, System.Text.Encoding.GetEncoding(932)); //内容を全て読み込む string textAll = sr.ReadToEnd(); 以上の関数を使ってテキストファイル上の文字を読み取りしているのですが、 textAll 変数に入ったときに文字化けしています。 また、テキストファイルによっては文字化けしないときもあります。 この場合、どのような対処をすればよいのでしょうか?

  • 文字コードを指定して・・

    妙な質問になってしまい申し訳ないのですが、変数内に入っている文字コード情報を使ってテキストに書き出す所がうまくいかず苦しんでおります。。 文字で説明するよりソースを見て頂いた方が何がしたいのか分かって頂けるかもしれません。。本当に初歩的な質問で申し訳ないですが、宜しくお願いいたします。 Dim aaa As String = "iso-2022-jp" dim bbb As String = "こんにちは" Dim txt As New StreamWriter("test.txt", False, system.Text.Encoding.GetEncoding(aaa)) txt.Write(bbb) txt.Close() GetEncoding(aaa)としたら、書き込めないと言われ、GetEndoding("aaa")とすればもちろん、そんなエンコードはないと言われてしまい困ってます。。VB.NETです。

  • csvを新ファイルに8番目で大きい順に並び替え

    VB2010です。 前回、質問させて頂いた続きです。 前回は質問の仕方が失敗で大変皆様にご迷惑をおかけしました・・・・・ 本当に申し訳なく思っています・・・ もうだんだん迷路に入ってしまったので、コードをそのまま記載しました。 Itm(7)を基準に数字の大きい順に並び替えしたいのです。 CSVは全部で19列あります。 ファイルによって違いますが、行数はだいたい100行ぐらいです 無理やりしたのコードを書いたのですが、あと一歩でやはりきれいに並び替えができません・・・ 大変皆様にお手数ですがお助け下さい・・・・ プロの皆様にはかなり幼稚なコードで大変失礼します。 いろいろと試してみたのですが、これぐらいしか自分の力量では思いつかなくて・・・・ 沢山失敗を繰り返したので変なコードも入っているかもですが・・・・・ Dim z As Integer = 0 Dim ReaderA As New IO.StreamReader(SyFolder & Me.Combo0.Text & "\Data\Sales\EachMonth\" & Me.ComboBox1.Text & ".csv", System.Text.Encoding.GetEncoding("Shift-JIS")) Dim LineA As String = ReaderA.ReadLine Dim Itm() As String Dim s As Integer = 0 Do Until IsNothing(LineA) Itm = LineA.Split(",") If z = 0 Then Dim Writer As New IO.StreamWriter(SyFolder & Me.Combo0.Text & "\Data\Sales\EachMonth\" & Me.ComboBox1.Text & "New.csv", False, System.Text.Encoding.GetEncoding("Shift-JIS")) Writer.WriteLine(LineA) Writer.Close() Else Dim ReaderB As New IO.StreamReader(SyFolder & Me.Combo0.Text & "\Data\Sales\EachMonth\" & Me.ComboBox1.Text & "New.csv", System.Text.Encoding.GetEncoding("Shift-JIS")) Dim Writer As New IO.StreamWriter(SyFolder & Me.Combo0.Text & "\Data\Sales\EachMonth\" & Me.ComboBox1.Text & "New2.csv", False, System.Text.Encoding.GetEncoding("Shift-JIS")) Dim LineB As String = ReaderB.ReadLine Dim Stm() As String Dim u As Integer = 0 Do Until IsNothing(LineB) Stm = LineB.Split(",") If Integer.Parse(Itm(7)) > Integer.Parse(Stm(7)) Then If u = 0 Then Writer.WriteLine(LineA) u += 1 End If End If Writer.WriteLine(LineB) If Integer.Parse(Itm(7)) <= Integer.Parse(Stm(7)) Then If u = 0 Then Writer.WriteLine(LineA) u += 1 End If End If s += 1 LineB = ReaderB.ReadLine Loop Writer.Close() ReaderB.Close() IO.File.Delete(SyFolder & Me.Combo0.Text & "\Data\Sales\EachMonth\" & Me.ComboBox1.Text & "New.csv") Microsoft.VisualBasic.FileSystem.Rename(SyFolder & Me.Combo0.Text & "\Data\Sales\EachMonth\" & Me.ComboBox1.Text & "New2.csv", SyFolder & Me.Combo0.Text & "\Data\Sales\EachMonth\" & Me.ComboBox1.Text & "New.csv") End If z += 1 LineA = ReaderA.ReadLine Loop ReaderA.Close()

  • インスタンス化について

    .NETでのインスタンス化について .NETでプログラムの勉強をしています。インスタンスについてお教えください。 ↓では、「sr」はnewキーワードを使ってインスタンス化しています。 ********************************************************************************** //"C:\test.txt"をShift-JISコードとして開く System.IO.StreamReader sr = new System.IO.StreamReader( @"C:\test.txt", System.Text.Encoding.GetEncoding("shift_jis")); //内容をすべて読み込む string s = sr.ReadToEnd(); //閉じる sr.Close(); //結果を出力する Console.WriteLine(s); ↓では、「enc」はnewキーワードを使ってインスタンス化していません。 ********************************************************************************** //読み込むテキストファイル string textFile = "C:\\text.txt"; //文字コード(ここでは、Shift JIS) System.Text.Encoding enc = System.Text.Encoding.GetEncoding("shift_jis"); //テキストファイルの中身をすべて読み込む string str = System.IO.File.ReadAllText(textFile, enc); //行ごとの配列として、テキストファイルの中身をすべて読み込む string[] lines = System.IO.File.ReadAllLines(textFile, enc); ********************************************************************************** 質問1: インスタンス化させる時にはnewキーワードが必要だと思っていましたが、「enc」はnewキーワードが使用されていません。 なぜでしょうか? 質問2: System.IO.StreamReader sr = new System.IO.StreamReader( @"C:\test.txt", System.Text.Encoding.GetEncoding("shift_jis")); 上記のように、newと同時にパスやエンコーディングを引数として渡しています。この事をコンストラクタとよぶのでしょうか? Googleで調べていますが、いまいち意味がわかりません・・・物凄くひらたくいうとどういったことなのでしょうか?何かプログラムではない、一般的な事で例えて頂けるとありがたいです。 宜しくお願い致します。

  • C#にてテキストファイル読み込み時のファイル指定

    C#でテキストファイルの読み込みがうまくいかず困っています。 他のPCの共有フォルダにアクセスしたいのですが //読み込むテキストファイル string textFile = @"192.168.0.**\test\a1.txt"; //文字コード(ここでは、Shift JIS) System.Text.Encoding enc = System.Text.Encoding.GetEncoding("shift_jis"); //テキストファイルの中身をすべて読み込む string str = System.IO.File.ReadAllText(textFile, enc); ネットで検索した文に従ってやっていますが、 System.IO.DirectoryNotFoundException: 'パス 'C:\Users\***\source\repos\WindowsFormsApp1\WindowsFormsApp1\bin\Debug\192.168.0.**\test\a1.txt' の一部が見つかりませんでした。 と、ファイルがあるディレクトリが追加されています。 どこを設定すれば無視できるようになりますか? Visual Studio2017を使用しています。 会社のPCでは問題なく指定できたのですが 自分のPCだと上記のようになります。 ネットで文を検索しながら作っている素人です。 お手柔らかにお願い致します。

  • DataSetのwriteXmlでのXML宣言

    お世話になります。 VB.NETでdatasetの値をXMLファイルに書いていますが、XML宣言部が書かれません。 同じような事象を検索してみましたが、該当するものはありませんでした。 またMSDNにも特に注意事項は記載されていません。 コードは以下のとおりとなります。 Dim filename As String = "C:\Documents and Settings\inui\My Documents\testXml\xmlWrite\XF_RACE.61.20110204.1.xml" ' Create an XmlTextWriter with the fileStream. Dim = New IO.StreamWriter(filename, False, _ System.Text.Encoding.GetEncoding("shift_jis")) ' Write to the file with the WriteXml method. _Dataset.WriteXml(xmlWriter) xmlWriter.Close() ご教授お願いしたします。

  • C# ファイルを読み込みlistviewに展開

    C#でtxtファイルを読み込み、listviewに展開したいのですが、txtファイルが ○○○,○○○ △△△,△△△ となっている場合、最初の一文字が消えて ○○,○○○ △△△,△△△ と表示されます。 コードは下記の通りです。 System.IO.StreamReader load = new System.IO.StreamReader(@".\test.txt", System.Text.Encoding.GetEncoding("shift_jis")); load.Read(); String file; while ((file = load.ReadLine()) != null) { string[] txtdate = file.Split(','); itemx = new ListViewItem(); itemx.Text = txtdate[0]; itemx.SubItems.Add(txtdate[1]); listView1.Items.Add(itemx); } load.Close(); 何を直せば最初の一文字目も読み込まれるかご教授下さい。

専門家に質問してみよう