2

回帰テストを作成していて、ファイルをある場所から別の場所に手動で移動する必要があります。UnauthorizedAccessException が発生するたびに、ファイルの移動元のフォルダーのアクセス許可と関係があると思いますか? ファイルの属性を確認しましたが、読み取り専用に設定されていません。他の質問と回答から、プログラム内の属性を通常に設定してみました。SetAccessControl を使用すると役立つかもしれないとも考えましたが、FileSecurity パラメーターの設定方法がわかりません。もちろん、私もこの問題についてかなり離れている可能性があります。アクセス許可に関しては、私は自分のローカル マシンとネットワークの管理者です。PowerShell から問題の場所との間でファイルを移動しようとしても、問題は発生せず、昇格したり強制したりする必要さえありません。Visual Studio はさまざまな権限で実行されていますか?もしそうなら、どうすればそれを変更できますか? コードは次のとおりです。

    internal static bool Process5010Claims(string batch)
    {
        string batchRegex = createBatchRegex(batch);
        string batchOnFileSystem = addDecimalToBatch(batch);
        bool isFound = false;
        string pth = @"\\hedgefrog\root\uploads";
        string destination = @"\\apexdata\data\claimstaker\claims\auto\5010";
        string[] files = Directory.GetFiles(pth);
        foreach (var file in files)
        {
            if (Regex.IsMatch(file, batchRegex))
            {
                string fullPath = Path.Combine(pth, batchOnFileSystem);
                var attr = new FileInfo(fullPath);


                //
                try
                {
                    File.Move(fullPath, destination);
                    isFound = true;
                    break;
                }
                catch (FileNotFoundException)
                {//Already been moved to the new directory
                }
                catch (UnauthorizedAccessException e)
                {
                    //In the middle of being moved?
                }
                catch (IOException)
                {
                }//Already been moved to the new directory
            }
        }

例外は私に本当の情報を与えていません、私が得ているのは次のとおりです: UnauthorizedAccessExceptionがキャッチされました

4

1 に答える 1

2

移動中にファイルの名前を指定していないように見えます。

コードを次のように変更してみてください。

if (Regex.IsMatch(file, batchRegex))
        {
            var fullPath = Path.Combine(pth, batchOnFileSystem);
            var fullDestinationPath = Path.Combine(destination, batchOnFileSystem);
            var attr = new FileInfo(fullPath);
            try
            {
                File.Move(fullPath, fullDestinationPath);
                isFound = true;
                break;
            }
于 2013-08-07T17:06:28.493 に答える