0

私は現在、新しい学生をアルファベット順に挿入し、他のいくつかの計算を行う必要がある、多数の学生が関与する学校のプロジェクトに取り組んでいます。新しい生徒を一度だけ追加するように取得するのに問題があります。if ステートメントがありますが、正しく動作していないようです。

`//this adds the new student
        StreamWriter changeFile = new StreamWriter("Students.txt", true);
        string newStudent = "(LIST (LIST 'Malachi 'Constant 'A ) '8128675309 'iwishihadjessesgirl@mail.usi.edu 4.0 )";
        // this is where I am getting stumped
        if (File.Exists(newStudent))
        {
            changeFile.Close();
        }
        else
        {
            changeFile.WriteLine(newStudent);
            changeFile.Close();
        }`

このようなコードを実行すると、プログラムをデバッグするたびに新しい生徒が追加されます。彼を一度だけ追加するにはどうすればよいですか?

4

3 に答える 3

3

File.Exists指定されたパスにファイルが存在するかどうかを判断します(記録のために、ファイルの読み取り/書き込みを試みる前にまだ実行する必要があります)。指定されたテキスト行が指定されたファイル内に存在するかどうかを確認しようとしています。それは非常に異なるタスクです。

ファイル内の行を読み、指定されたテキストと比較する必要があります。

if(!File.ReadLines(filepath).Contains(newStudent))
{
    //TODO: Append student to the file
}
于 2013-11-07T18:22:55.770 に答える
1

File.Exists(string path) は、指定されたパスにファイルが存在するかどうかを判断する bool を返します。 http://msdn.microsoft.com/en-us/library/system.io.file.exists(v=vs.110).aspx

string newStudent はファイル パスではないため、常に false を返します。

あなたが望むのは次のようなものだと思います:(これはメモリによるものなので、そのままではコンパイルされない可能性があります)

var file = File.Open("students.txt");
var fileContents = file.ReadToEnd();
if (!fileContents.Contains(newStudent))
{
  file.WriteLine(newStudent);
}
file.Close();
于 2013-11-07T18:23:53.147 に答える
1

最初に既存のファイル データをString変数に読み取り、次に、指定された生徒データが利用可能かどうかを確認します。指定された生徒データが見つからない場合は、新しい生徒データをファイルに書き込みます。それ以外の場合は、既に存在する場合は、開いているストリームを閉じます。 .

String StudentInfo = System.IO.File.ReadAllText("Students.txt");
    StreamWriter changeFile = new StreamWriter("Students.txt", true);


            string newStudent = "(LIST (LIST 'Malachi 'Constant 'A ) '8128675309 'iwishihadjessesgirl@mail.usi.edu 4.0 )";
            // this is where I am getting stumped
            if (StudentInfo.Contains(newStudent))
            {
                changeFile.Close();
            }
            else
            {
                changeFile.WriteLine(newStudent);
                changeFile.Close();
            }
于 2013-11-07T18:31:20.700 に答える