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

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

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

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

5254閲覧

VB 読み込んだファイルに対して、追記書き込みするには?

mori_C

総合スコア34

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2020/07/17 05:35

VB.netでのファイル読み書きについての質問です。

csvファイルを読みこみ、そのファイルに対して、追記書き込みをしようと思っていますが、書き込みファイルを操作する段階で、読み込みファイルが使用中のためというエラーがでます。

ソースファイルは・・・
readstring = My.Computer.FileSystem.ReadAllText("C:\test.csv", enc)
でreadstringを読み出し

readstring = readstring & "追記" 
とか文字を付けたし

My.Computer.FileSystem.WriteAllText("C:\test.csv", readstring, False, enc)
で書き出そうと思うのですが、

別のプロセスで使用されているため、プロセスはファイル 'C:\test.csv' にアクセスできません

というエラーがでます。

my.computer.filesystemはclose処理がいらないとWEBで調べたのですが
なにか手順を間違えているのでしょうか。

簡単なことだと思うのですが、つまずいています。
アドバイスをお願いします。

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

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

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

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

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

guest

回答2

0

FileSystem.ReadAllTextの時点で、すでに該当ファイルが他のシステムによって
ロックされているのではありませんか?

投稿2020/07/17 06:21

Rocky

総合スコア261

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

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

0

ベストアンサー

VBNET

1Dim enc = System.Text.Encoding.GetEncoding("SHIFT-JIS") 2Dim readstring = My.Computer.FileSystem.ReadAllText("C:\test.csv", enc) 3 4readstring = readstring & "追記" 5 6My.Computer.FileSystem.WriteAllText("C:\test.csv", readstring, False, enc) 7

上記ソースで確認しましたが、現象が確認できませんでした。
現象が確認できるソースを提示していただけないでしょうか。
もしくは確認するためだったりで別のもの(例えばエクセル等)で開いていたりしませんか?

また、ファイルに追記するだけであれば

VBNET

1My.Computer.FileSystem.WriteAllText("C:\test.csv", "追記", True, enc)

で済みます。

投稿2020/07/17 05:57

YAmaGNZ

総合スコア10489

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

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

mori_C

2020/07/17 06:19 編集

記載していただいたプログラムを貼り付け、実行したら問題なく動作しました。 しかし、自分のものに組み合わせて実行したら、エラーがでて動作しませんでした。 ほかの部分に問題があるということで、調べていくと ファイルの行数をカウントするプログラムが挿入してあり、 そこでは、close処理が必要だったようです。 一文挿入するとうまく動作しました。ありがとうございました。 Public Function GetLinesOfTextFile(ByVal FileName As String) As Integer Dim StReader As New System.IO.StreamReader(FileName) Dim LineCount As Integer '行数カウント用 While (StReader.Peek() >= 0) StReader.ReadLine() LineCount += 1 End While StReader.Close()  ←ここの一文 Return LineCount End Function
YAmaGNZ

2020/07/17 06:24

Using StReader As New System.IO.StreamReader(FileName) Dim LineCount As Integer '行数カウント用 While (StReader.Peek() >= 0) StReader.ReadLine() LineCount += 1 End While End Using といった感じでUsingステートメントを使用することをお勧めします。 そうすれば、Usingステートメントの有効範囲を抜けたらClose等の後処理が行われますので、今回のようなClose忘れがなくなるかと思います。
mori_C

2020/07/17 06:48

ありがとうございます。いろいろ勉強になりました。 using 使うようにしたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問