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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

Q&A

解決済

1回答

17285閲覧

File.Move()でのロックについて

nfkw1492

総合スコア25

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

0グッド

2クリップ

投稿2016/08/22 04:20

C#を使ってファイルを移動するプログラムを書いたのですが、移動後に短時間の間ファイルがロックされる症状が出ており、この原因を調査しています。

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

C#

1using (StreamWriter sw = new StreamWriter(frompath)) 2{ 3 sw.Write("any contensts..."); 4} 5System.IO.File.Move(frompath, destpath);

destpathをポーリング監視している別のプログラムで、ごく短時間ですが、ファイルがロックされている事が検知されるケースがあります。
from,destは違うPCでネットワーク越しでのコピーになります。

私の理解では、File.CopyやFile.Moveではファイルのロックは発生しない(先にバイナリができてからFAT(MFT?)にレコードが追加される)という認識でウィルス対策ソフトなどが原因と考えているのですが、相談した知人からHDDのWrite back cacheが有効だとMoveであってもファイルがロックされるケースがあるという話や、そもそもネットワーク経由のコピーであればMoveでもロックされるのでは?という意見もあり悩んでおります。

File.MoveやFile.Copyの内部でどういった処理がされているかご教示頂けませんでしょうか?

###補足情報(言語/FW/ツール等のバージョンなど)
環境 Windows 7, 10、 .net framework 4.5

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

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

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

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

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

guest

回答1

0

ベストアンサー

File.MoveFile.Copy がどのような実装になっているかは.NET Frameworkのソースを見てみればわかりますが、結局はネイティブ Win32 API の MoveFile(), CopyFile() 呼び出しとなります。

で、MoveFile()CopyFile()のAPIヘルプを見ると分かりますが、ネットワーク上のファイル操作の場合、様々な技術(プロトコル)が使用されますので、ファイルがロックされるかどうかはそれらの実際に使用されるプロトコル(サーバー側の仕様)に依存することになります。

なので、File.CopyやFile.MoveでOSがファイルをロックするかどうかの仕様は、一概にこうだとは決まっていない(決められない。将来的に状況が変化する可能性もある)というのが、実態だとおもわれます。

ちなみに、Process Monitor というツールを使用すればファイルをロック(排他オープン)している状況がモニタリング可能なので、アンチウィルスソフト系がファイルをロックしているのかなど、もう少し詳しい状況が分かると思いますので試してみてください。

投稿2016/08/22 12:21

KenjiToriumi

総合スコア344

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

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

nfkw1492

2016/08/22 23:29

教えて頂いたProcess Monitorで原因の特定ができそうです。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問