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

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

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

Microsoft Visual Basic .NET (VB.NET)とはオブジェクト志向のプログラム言語です。 Microsoft"s Visual Basic 6 のバージョンアップとしてみることができますが、Microsoft.NET Frameworktによって動かされています。

VB.NET

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

Q&A

解決済

2回答

20801閲覧

他のプロセスが利用中のファイルをコピーしたい。

yuki00079

総合スコア45

Visual Basic .NET

Microsoft Visual Basic .NET (VB.NET)とはオブジェクト志向のプログラム言語です。 Microsoft"s Visual Basic 6 のバージョンアップとしてみることができますが、Microsoft.NET Frameworktによって動かされています。

VB.NET

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

0グッド

1クリップ

投稿2016/09/29 05:06

###前提・実現したいこと
共有(ネットワークドライブ越し)利用しているテキストファイルがあり、処理するたびに「他のプロセスが使用中です。」となるのを防ぎたい。
対策としてローカルパスに処理するたびにコピーしているのだがエラーが出てしまい頓挫している。

###発生している問題・エラーメッセージ
~は他のプロセスが使用中です。

###該当のソースコード

Dim filePath = Path.Combine("\\192.168.1.1\test", "xxx.CSV") If Not File.Exists(filePath) Then MessageBox.Show("ファイルが見つかりません。") Return Nothing Else '↓ここでエラー発生。 File.Copy(Path.Combine("\\192.168.1.1\test", "xxx.CSV"), Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "xxx.CSV"), True) End If

###試したこと
いくつかエラー処理を実装しコピーできない旨をメッセージで伝える等を行っているが解決に至らず。
最終的には無理にでもコピーしたい。
ネットワークドライブ上のファイルの為、不特定多数のユーザーが閲覧する可能性があり、プロセスの特定が難しい。
その場でファイルを取り扱わず、ローカルコピーを行えばどうにかなるかと考えたが、コピーに失敗する為頓挫している。

###補足情報(言語/FW/ツール等のバージョンなど)
vb.net .net4.5 VB14

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

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

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

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

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

guest

回答2

0

ベストアンサー

maisumakunさんも書かれていますが、OSの排他なので無理するとファイル壊れる恐れがありますが、
CSVやTXTファイル等であれば、
読み取り専用でOpenし全データ読み込み
コピー先に書き込みを行う方法はいかがでしょう。
ファイルのサイズなどで時間がかかる等あるかもしれませんが。

投稿2016/09/29 07:12

KIYOSHI

総合スコア268

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

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

yuki00079

2016/09/29 08:06

返信ありがとうございます。 System.IO.File.OpenReadにて読み込んだファイルストリームを元にテキストを作成するということでしょうか?。
KIYOSHI

2016/09/30 06:50

File.OpenReadでOpenし、 Readで中身を読み取る。 File.OpenWriteで書き込み先ファイルをひらく。 中身を書き込み でいかがでしょう。
yuki00079

2016/10/01 12:35

上記の手法はFile.Copyに失敗した場合のみすべきでしょうか。 初めからFile.OpenReadからの書き込み手法が良いのでしょうか。 その場合、拡張メソッドのようなのも検討すべきなのか。
KIYOSHI

2016/10/03 02:00

それは、環境とかによるので、 一概にこれがいいとは言えないです。 他のアプリがどんどん吐き出すようなファイルだとすれば、 Copyは行わないで、Read/Writeがいいように思います。
yuki00079

2016/10/03 05:54

確かに、場合によりけりですね。 今回はCopyに失敗した場合にRead,Writeで望みたいと思います。
guest

0

同じファイルを参照する別のプロセスに手を入れられない限り、こちら側でできることはあまりありません。

Windowsでは、Windows APIレベルまで遡ってみると、CreateFileというAPIを使ってファイルをオープンしますが、この中にdwShareModeという共有状態を指定する引数があります。最初に開く側が明示的に「FILE_SHARE_READ」を指定していない限り、読み込みもロックされてしまいます

ファイルが破損しないように、ファイルシステムには排他制御がかかっています。それにしたがって運用する他ありません。

投稿2016/09/29 05:40

maisumakun

総合スコア145183

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問