2012-04-27 179 views
6

現在、第一に、私は、ファイルを使用してファイルからバイトのストリームを読んでいるのWindows 7上のVisual Studio 2010、.NET 4にSystem.IO.WriteAllBytes - パスへのアクセス拒否エラー

をC#のWinFormsアプリケーションを開発します。 ReadAllBytes()メソッドその後、ファイルを書き込もうとすると、WriteAllBytesメソッドを使用しているときにパス拒否エラーにアクセスしています。

リテラルパス、Environment.SpecialFolder.ApplicationData、Path.GetTempPath()を渡してみましたが、すべて同じエラーが表示されています。

私はこれらのフォルダに対するアクセス許可をチェックしており、管理者モードでプログラムを起動しようとしました。

+2

コードを投稿できますか? –

答えて

1

ファイルがまだロックされていませんか?ファイルからバイトを読み書きする予定がある場合は、Streamクラス(たとえばFileStream)を使用することを検討することをお勧めしますが、その利点は、ファイルをロックし、その間に他のアプリケーションがそのファイルにアクセスできないことです。 this topicから

コード例:Windows7ので

FileStream fileStream = new FileStream(
    @"c:\words.txt", FileMode.OpenOrCreate, 
    FileAccess.ReadWrite, FileShare.None); 
+0

ロックされたファイルは、全く異なる例外を生成します。 –

+0

あなたが正しいです、ファイルがロックされている場合、System.IO.IOExceptionを返します。 – Styxxy

1

は、C上のセキュリティ問題があります:。パスをD:に変更した場合は、アクセス拒否の問題はありません。

次のサンプルコードをPath.GetTempPath()で試してみると、正常に実行されます。

static void Main(string[] args) 
    { 
     string path = Path.GetTempPath(); 
     byte[] binaryData; 
     string text = "romil123456"; 
     using (MemoryStream memStream = new MemoryStream(Encoding.ASCII.GetBytes(text))) 
      { 
       binaryData = memStream.ToArray(); 
      } 
      System.IO.File.WriteAllBytes(@path + "\\words123.txt" , binaryData); 
     } 
    } 

Environment.SpecialFolder.ApplicationDataは、そのフォルダへの完全なパスではなく、フォルダ名を提供します。ファイルを書き込むために定義されたパスでこれを使用すると、このフォルダーはローカルアプリケーションパスで検索されます。

+0

このエラーはc:以外のエラーではなく、ivはWindows 10のすべてのドライブでこのエラーを経験しました。 – ShadowKras

1

ファイル名を含むFile.WriteAllBytes()を使用する場合は、パス全体を指定するようにしてください。

File.WriteAllBytes()一般的なディレクトリに書き込むことはできません。特定のファイルに書き込む必要があります。

これが役に立ちます。

関連する問題