• ベストアンサー

すでにファイルが開かれている時のエラー回避

VB2010で、ファイルを開いていると下記のコードでエラーがでます。 Dim SR As New System.IO.StreamReader(AppPath & "諸元一覧.csv", System.Text.Encoding.Default) 「諸元一覧.csv」ファイルを閉じてください。 とメッセージを出し、ExitSubしたいのですが、 どういうコードにすればよいのでしょうか。 教えてください。よろしくお願いいたします。

  • ddtqp
  • お礼率68% (139/203)

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

  • ベストアンサー
  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.2

先の回答にあるように、ファイルを開いていてもエラーが出ない場合もあります。 ファイルがロックされている場合は IOException が発生するようなので、 Try ~ Catch で IOException をエラートラップする方法もあります。 (※ただのエラートラップではファイルが存在しない等の他のエラーと  区別できませんので、エラーの種類まで限定してエラートラップします。)

ddtqp
質問者

お礼

いつもよい回答ありがとうございます。 勉強になりました。 下記コードで対応しました。 Try Dim SR As New System.IO.StreamReader(AppPath & "ROHR諸元一覧.csv", System.Text.Encoding.Default) <処理> Catch ex As System.IO.FileNotFoundException MsgBox("「ROHR諸元一覧.csv」ファイルが同じ階層にありません。") Me.Close() Catch ex As System.IO.IOException MsgBox("「ROHR諸元一覧.csv」ファイルが開いている可能性があります。") Me.Close() End Try

その他の回答 (1)

  • ShowMeHow
  • ベストアンサー率28% (1424/5027)
回答No.1

関連するQ&A

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

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

  • 排他ロックが掛かっているファイルを読み込む

    排他ロックが掛かっている(別のプロセスが使用している) テキストファイルを読み込みたいのですが、 System.IO.FileStreamを実行した後に、IOExceptionエラーが発生し、 読み込みができません。 System.IO.FileStreamにはこだわってませんので、 排他ロックが掛かっているテキストファイルを読み込む方法を ご存知の方は、ご教授頂けませんでしょうか。 宜しくお願いします。 <ソースコード> 'ファイルパス wFullPath = "\\XXX.XXX.XXX.XXX\TEXT\TEST.TXT" (XXX.XXX.XXX.XXX:IPアドレス) 'ファイルを開く Dim fs As New System.IO.FileStream(wFullPath, _ System.IO.FileMode.Open, _ System.IO.FileAccess.ReadWrite, _ System.IO.FileShare.ReadWrite) 'FileStreamを基にしたStringReaderのインスタンスを作成 Dim enc As System.Text.Encoding = _ System.Text.Encoding.GetEncoding("shift_jis") Dim sr As New System.IO.StreamReader(fs, enc) 'ファイルの内容をすべて読み込む Dim s As String = sr.ReadToEnd() <開発環境> 言語:VB.NET Microsoft Visual Studio 2008 Microsoft .NET Framework Version 3.5 SP1

  • VB6.0にてStreamReaderを使用したいのですが、

    VB6.0にてStreamReaderを使用したいのですが、 Dim Reader As New IO.StreamReader("C:\Windows\System32\eula.txt", のコードが赤字でエラーになります。 どう修正すればよろしいでしょうか? ご存知の方教えてください。よろしくお願いします。 Dim strTemp As String Dim Reader As New IO.StreamReader("C:\Windows\System32\eula.txt", System.Text.Encoding.GetEncoding("Shift-JIS")) strTemp = Reader.ReadToEnd msgobox strTemp Reader.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で調べていますが、いまいち意味がわかりません・・・物凄くひらたくいうとどういったことなのでしょうか?何かプログラムではない、一般的な事で例えて頂けるとありがたいです。 宜しくお願い致します。

  • 【VB2005】です。txtファイルを配列に読み込もうとしています。

    45*45のtxtデータを配列に読み込もうとしているのですが、エラーが出ます。なぜでしょうか? 宜しくお願いします。 【VB2005を使っています。】 Private Sub OpenButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OpenButton1.Click Dim selectButton As DialogResult Dim filename As String Dim i, j As Integer \'開く ダイアログの表示 selectButton = DBOpenDialog1.ShowDialog() filename = DBOpenDialog1.FileName If selectButton = Windows.Forms.DialogResult.OK Then Dim sr As System.IO.StreamReader = Nothing Dim readFields() As String i = 0 sr = New System.IO.StreamReader(filename, System.Text.Encoding.Default) Do Until sr.EndOfStream readFields = sr.ReadLine().Split(\",\") For j = 0 To 44 Tests1(i, j) = readFields(j) Next j i += 1 Loop sr.Close() End If End Sub

  • C#のテキストファイル読み込みについて

    C#のテキストファイル読み込みについて 2次元配列を使います(a[行][列]みたいに テキストファイルを1文字ずつ読み込みます。 そして、改行文字が見つかると行を1つずらします それを繰り返して最後まで読みこむと終わり そんなことをしたいです DOBON.NETでこんなの見つけたんですが 上の処理をしようと思っても、どこをいじればできるのかわかりませんでした //"C:\test.txt"をShift-JISコードとして開く System.IO.StreamReader sr = new System.IO.StreamReader( @"C:\test.txt", System.Text.Encoding.GetEncoding("shift_jis")); //内容を一行ずつ読み込む while (sr.Peek() > -1) { Console.WriteLine(sr.ReadLine()); } //閉じる sr.Close(); よくわかるサイトとかあったら教えてください、お願いします

  • CSVの一行目をコンボボックスに表示させたい

    毎回質問ばかりですみません。 CSVの一行目の","を起点にして分割をして そのあと分割したものをコンボボックスの一覧に入れたいのですが なかなかうまくできません。 Dim delimiter As String = "," dim txtf2 As New IO.StreamReader(ファイル保存場所,System.Text.Encoding.Default) IDset = txtf2.ReadLine Dim a As String() = IDset.Split(delimiter) とここまではできるのですが それをコンボボックスに追加する方法がわかりません。 IDsetが不特定な数を想定してるので for nextなどでとは考えているんですがうまくプログラミングができません。 指導いただけるとうれしいです。

  • c#で(",")区切りのcsvファイルから読み込みを行うには?

    駆け出しの初心者です。 以前c言語を少々勉強していてcsvファイルの読み込み、書き出しを練習していたのですが、最近c#を使うようになり、その便利さに圧倒されております。 今回c#で読み込みたいcsvファイルは以下のようになっております "abc","123","あいうえお" ただのカンマ区切りであれば読み込みは簡単ですが、 上記のようにダブルクオーテーションでそれぞれの文字列が囲まれている場合に文字列だけを読み込み、配列に代入していくのに何かスムーズな方法はありませんでしょうか? ちなみに現在単純にカンマ区切りのcsvファイルを読み込むコードを 書いた所ですので、載せておきます これをいじってスムーズにいければうれしいのですが、いかがでしょうか? private void LoadData() { string path = "Data.csv"; string delimStr = ",";//区切り文字 char[] delimiter = delimStr.ToCharArray(); string[] strData;//分解後の文字用変数 string strLine;//1行分のデータ Boolean fileExists = System.IO.File.Exists(path); if (fileExists) { System.IO.StreamReader sr = new System.IO.StreamReader( path, System.Text.Encoding.Default); while (sr.Peek() >= 0) { strLine = sr.ReadLine(); strData = strLine.Split(delimiter); DataSet.DataTable.AddDataTableRow( DateTime.Parse(strData[0]), strData[1],    strData[2], int.Parse(strData[3]), strData[4]); } sr.Close(); } } いつも丁寧な回答で協力してくれる皆様には心から感謝しております。 どうぞよろしくお願いします。

  • ウェブ内容をshift-jis変換するには?

    続けての質問になってしまいます。 VB.NET で、ウェブクライアントで下記のようにウェブページの内容を取得しましたが、 コードがUTF?のため日本語で表示されません。 内容を変数に格納し、shift-jis変換するにはどのように記述すればよいのでしょうか? Dim webClient As New System.Net.WebClient Dim sr As System.IO.Stream = webClient.OpenRead("http://www.nikkei.co.jp/") Dim srRead As New System.IO.StreamReader(sr) TextBox1.Text = srRead.ReadToEnd  よろしくお願いします。

  • VB TEXTデータについて

    下記のコードでTEXTを読み取りできましたが、読み取ったデータを使用して座標計算したいのですが 例えば、6列6行あるとします、1列目(X)、2列目(y)、3列目(X1)、4列目(y2)、5列目(角度)、6列目(予備)、となっているものが6行あります、1列目・1行の値から、6列目・6行の値まで指定するとき どのようなコードがあるのでしょうか、宜しくお願いします。 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim sr As System.IO.StreamReader = Nothing ' Try Dim file As String = TextBox1.Text 'SRとは New System.IO.StreamReaderの略 sr = New System.IO.StreamReader(file, System.Text.Encoding.GetEncoding("shift_jis")) Dim doc As String = "" '1行ずつテキストを読み取る Do Until sr.EndOfStream '改行コードが取り除かれてしまうのでVBnewlineで改行を付け直し doc &= sr.ReadLine & vbNewLine Loop 'TEXTBOX.2にdocを代入 TextBox2.Text = doc Catch ex As Exception MessageBox.Show(ex.Message, "read") Finally If sr IsNot Nothing Then sr.Close() sr.Dispose() End If End Try End Sub

専門家に質問してみよう