2

私は自分のアプリケーション ディレクトリに保存されているファイルを取得し、彼はいくつかのサイト リストを取得しました。読むのに問題はありませんが、書きたいときは

System.ArgumentException: Stream is not writeable

これは私がファイルにアクセスする方法です:

  FileStream theTextFileStream = new FileStream(Environment.CurrentDirectory + "/fourmlinks.txt",FileMode.OpenOrCreate);

そして、これは私に期待を投げかける関数です:

public static void WriteNewTextToFile(string text, FileStream theFile)
    {
        string fileText = GetAllTextFromFile(theFile);
        ArrayList fileLIst = populateListFromText(fileText);

        using (StreamWriter fileWriter = new StreamWriter(theFile))
        {
            fileWriter.Write(String.Empty);
            for (int i = 0; i < fileLIst.Count; i++)
            {
                fileWriter.WriteLine(fileLIst[i].ToString());        
            }
        }
    }

関数は古いテキストと新しいテキストを読み取り、それを arry に追加します。次に、すべてのものからファイルを消去し、作成した arry の古いデータと新しいデータでファイルを書き換えます。

それが役立つかどうかはわかりませんが、ファイルの適切さは次のとおりです。

Build Action: None
Copy To Out Put Directory: Copy always

なぜ私はファイルを書き換えることができないのですか?

これは、ファイルの内容を読み取るために使用する関数です。

public static string GetAllTextFromFile(FileStream theFile)
    {
        string fileText = "";

        using (theFile)
        {
            using (StreamReader stream = new StreamReader(theFile))
            {
                string currentLine = "";
                while ((currentLine = stream.ReadLine()) != null)
                {
                    fileText += currentLine + "\n";
                }

            }
        }

        return fileText;

    }
4

1 に答える 1

3

パラメータとして読み取り/書き込みファイルアクセスを使用する必要がありthirdます-

FileStream theTextFileStream = new FileStream(Environment.CurrentDirectory + "/fourmlinks.txt",FileMode.OpenOrCreate, FileAccess.ReadWrite
);

using(theFile)重要 -ステートメントを削除:

public static string GetAllTextFromFile(FileStream theFile)
{
        string fileText = "";

        using (StreamReader stream = new StreamReader(theFile))
        {
            string currentLine = "";
            while ((currentLine = stream.ReadLine()) != null)
            {
                fileText += currentLine + "\n";
            }

        }


    return fileText;

}

usingあなたのケースでは、手動openclose streamオブジェクトを作成する必要があるため、基になるストリームを閉じるため、コンストラクトを使用しないでください。

これにより、ファイルにも書き込むことができます。

詳細については、次のリンクを参照してください -

于 2012-10-17T20:42:29.380 に答える