9

現在、Windows 7 上の Visual Studio 2010 .NET 4 で C# WinForms アプリケーションを開発しています。

まず、File.ReadAllBytes() メソッドを使用してファイルからバイト ストリームを読み取ります。次に、ファイルを書き戻そうとすると、WriteAllBytes メソッドを使用すると、パスへのアクセスが拒否されたというエラーが発生します。

リテラル パス、Environment.SpecialFolder.ApplicationData、Path.GetTempPath() を渡そうとしましたが、すべて同じエラーが発生します。

これらのフォルダーのアクセス許可を確認し、管理者モードでプログラムを起動しようとしましたが、うまくいきませんでした。

4

3 に答える 3

3

Windows7 では、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 は、そのフォルダーへのフル パスを提供するのではなく、フォルダー名を提供します。したがって、ファイルを書き込むために定義されたパスでこれを使用すると、このフォルダーはローカルアプリケーションパスで検索されます。

于 2012-04-28T06:26:45.523 に答える
2

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

このトピックのコード例:

FileStream fileStream = new FileStream(
  @"c:\words.txt", FileMode.OpenOrCreate, 
  FileAccess.ReadWrite, FileShare.None);
于 2012-04-27T12:22:52.800 に答える