2017-04-18 12 views
1

私は文書https://msdn.microsoft.com/en-us/library/9706cfs5(v=vs.110).aspxを調べましたが、操作が原子的であるかどうかには何も見つかりませんでしたか?他のファイルがコピー中にファイルにアクセス/読み取りできるという意味では原子的です。System.File.IO.Copyアトミックです(コピー中に別のプロセスがアクセス/読み取りできます)?

+1

「アトミック」とは何ですか?何について?ロック?ファイルのコピー中に発生する可能性のあるエラーはかなり多く、 'Copy'はすべての環境で同じように動作するわけではありません。 – Kobi

+0

コピー中に別のプロセスがファイルにアクセス/読み取りできますか? – Almir

+0

それは良い質問です。質問とそのタイトルを編集して、意味を正確に説明する必要があります。現在は明確ではありません。 – Kobi

答えて

2

私は「原子」とは思わないあなたは(私の知る限りは、P /呼び出しCopyFileTransactedなし.NETで行うことはできません)アトミックトランザクションの一部としてコピーの話をしている場合を除き、あなたの質問のための右の文言です。

実装の詳細では、これは...と言いましたが、.NETはさまざまなプラットフォームで動作し、それぞれが異なる場合があります。

File.Copy()Windowsデスクトップの実装では、はWin32 CopyFileを呼び出します。この点での行動は...文書化されていませんが、ハンドルがどのように開かれているかを調べることができます。簡単なテストから、あなたはそれを参照することができます:

  • ソースファイルをFILE_SHARE_READFILE_SHARE_WRITEFILE_SHARE_DELETEで開かれています。
  • 対象ファイルはFILE_SHARE_READ,FILE_SHARE_WRITEで公開されています。

安全仮定:、OS、メディアおよびファイルシステムには異なる規則がある可能性があります。これが時間の経過と共に安定しているとも仮定しないでください。

と仮定してください。ソースファイルにFILE_SHARE_READがあり、ターゲットファイルについては何も想定していないことが想定されます。

+0

私は不思議です、ファイルハンドルがどのように開かれたかどう点検しましたか? – stakx

+1

@stakx私は怠け者です...ここではWinDbgはありません。 –

関連する問題