3

私はしばらくの間これに苦労しています。File.Copy メソッドを呼び出した後、ファイルにアクセスできません。これが私が試したものです:

File.Copy(sourceFile, destinationFile, true);
FileStream fs = File.Open(destinationFile, FileMode.Open);

2 行目で UnauthorizedAccessException を取得しています。それは言う:パスへのアクセス...が拒否されました。ここに記載されている提案も試しましたが、うまくいきませんでした。

どんな助けでも大歓迎です。

編集:これが私が見つけたものです。私がこれを行う場合:

File.Copy(sourceFile, destinationFile, true);
FileStream fs = File.Open(destinationFile, FileMode.Open, FileAccess.Read);

例外をスローしません。アクセスしようとしているファイルは読み取り専用です。そこで、次のように読み取り専用属性を削除しようとしました。

File.Copy(sourceFile, destinationFile, true);
FileInfo fileInfo = new FileInfo(destinationFile);
fileInfo.IsReadOnly = false;
FileStream fs = File.Open(destinationFile, FileMode.Open, FileAccess.ReadWrite);

そして、以前と同じ例外が発生します。ちなみに、ファイルを手動で開いて編集できるかどうかを確認しましたが、できます。もちろん、読み取り専用チェックボックスをオフにすると。また、デバッグ中に 3 行目の直後に Windows エクスプローラーでファイル属性を確認したところ、ファイルは読み取り専用ではなくなりました。すべてをチェックしたところ、4行目で例外がスローされる理由がわかりません。

4

2 に答える 2

5

File.Copy開くことができないのは、コピーしたファイルのみであり、ターゲット フォルダー内のすべてのファイルではないでしょうか? これは通常の NTFS フォルダですか、それともネットワーク共有ですか?

ウイルス対策ソフトウェアまたはセキュリティ ソフトウェアを実行している場合は、無効にしてみてください。ファイルが作成された後、多くの場合、ファイルを開いてスキャンします。

アップデート

http://msdn.microsoft.com/en-us/library/b9skfh7s.aspxによると、「パスへのアクセス...が拒否されました」というメッセージは表示さUnauthorizedAccessExceptionFile.Openません。(編集: File.Copy のメッセージも表示されないため、これは間違っている可能性があります)

その例外で失敗するのはあなたFile.Copyだと思います。ソースファイルを読み取る権限も、ターゲットファイルを書き込む権限もありません。おそらく、強調表示されたソース コード行を見ていると思います。これは、次に実行される行を示しています。

だから - 多分あなたのコピーは失敗しますFile.Open

于 2011-06-06T12:07:14.650 に答える
-2

これを試して!


   private bool CheckFileHasCopied(string FilePath)
    {
        try
        {
            if (File.Exists(FilePath))
            {
                using (File.OpenRead(FilePath))
                {
                    return true;
                }
            }
            else
            {
                return false;
            }
        }
        catch (Exception)
        {
            Thread.Sleep(2000);
            return CheckFileHasCopied(FilePath);
        }

    }

if (CheckFileHasCopied(destinationFile)) { File.Delete(sourceFile); }
于 2011-06-24T18:33:11.927 に答える