2016-06-23 9 views
0

当社の社内アプリケーションでは、起動時に読み取るフォルダXのファイルaa、bb ... zzが必要です。私(FullControlのフォルダXにアクセスできる人)がアプリを起動すると、すべてうまくいく。私の同僚(フォルダXへの読み取りアクセス権しか持っていない)がアプリを起動すると、「ファイルにアクセス拒否」という例外が発生します。アプリケーションエクスプローラを使用してファイルをコピーすることはできますが、ファイルにアクセスできない

のファイルは、以下のルーチン

 public static void readFromBinaryFile(this QIHasFileIo xThis, string xFilePath) 
     { 
      if (!System.IO.File.Exists(xFilePath)) 
       throw new System.Exception("File to read " + xFilePath + " does not exist ... "); 

      if (xThis == null) 
       throw new NullReferenceException("xThis cannot be null, as it is a readonly reference ... "); 

      using (BinaryReader xReader = new BinaryReader(new FileStream(xFilePath, FileMode.Open, FileAccess.Read))) 
       xThis.readObject(xReader); 
     } 

つまり、私は順番に必要とフォルダのみへのアクセスをお読みください読み取りモードを指定していますによって読まれています。私の同僚がエクスプローラでフォルダXに移動すると、aa、bb、...ファイルをデスクトップにコピーできます。つまり、ファイルへの読み取りアクセス権があります。

私は興味をそそられています。この奇妙な動作は、数日前にデータサーバーの変更から始まりました。最も顕著な変更点は、1 /私の同僚がデータサーバー2の管理者権限を持っていないこと/いくつかのGPOが混乱している可能性があるということでした(以前は社内で起こっていました)。 IT部門も同様に困惑しているので、どのように進めるべきかわからない。

どれヒントははるかに高く評価され、 ダニエル

編集:アンすでに削除ポストはFileShare.ReadWriteを使用して提案しました。私はコメントの著者に感謝していますが、ファイルには書き込みロックがないことが保証されています。したがって、why File.copy works but File.OpenRead prompts access denied?スレッドはここでは関係ありません。

+0

ファイルは、別のプロセスによって同時に書き込まれているか、またはアクセスされていますか? – Baldrick

+0

もしそうなら、 'FileStream'コンストラクタに渡されるパラメータに' FileShare.ReadWrite'を追加する必要があります。これにより、排他的な読み取りロックを取得しようとしません。 – Baldrick

+0

[File.copyが動作するのにFile.OpenReadがアクセスを拒否する理由は?](http://stackoverflow.com/questions/28087927/why-file-copy-works-but-file-openread-prompts-access-拒否されました) – Baldrick

答えて

1

FileStreamコンストラクタに渡されるパラメータにFileShare.ReadWriteを追加する必要があります。

これは、アプリケーションが排他的な読み取りロックを取得しようとするのを防ぎます。共有読み取り/書き込みロックが可能な場合(他のプロセスが書き込みを行うためにファイルを開いたままにしておくなど)

1

ファイルの読み取り中に同様の問題が発生しました。問題は、ユーザーの特定のグループ(リーダーグループ)のActiveDirectoryグループのアクセスレベルが正しく設定されていないことにありました。 サーバーでADグループ認証を使用しているかどうかわかりません。同僚が持っているアクセスの種類やグループを確認することをお勧めします。また、ディレクトリにアクセスするためにアプリケーションが現在どのようにユーザーを認証しているかを確認する必要があります。

+0

ありがとうございます。現在のところ、アプリ自体には認証がありません(私たちは中小企業です)ので、アプリはWindowsのログイン情報でファイルにアクセスします。グループについては...私はITにいくつかのヒントを与えることができるように、より多くのキーワードや何かを覚えていてください?どうもありがとう。 –

+0

ありがとうございます。 1.ディレクトリ(または特定のファイル)にユーザーが手動でアクセスできるかどうかを確認します。 2.ユーザーに完全なアクセス権を与え、テストしてみてください。 3.ユーザーがファイルに適切にアクセスできる現在のディレクトリの外に別のファイル共有パスを作成してみます –

関連する問題