2013-11-07 3 views
0

В настоящее время я работаю над школьным проектом с участием большого числа студентов, где мне нужно вставить нового ученика в алфавитном порядке и выполнить несколько других вычислений. У меня возникают проблемы с его получением, поэтому он только добавляет нового ученика один раз. У меня есть оператор if, но он не работает должным образом.Streamwriter, если оператор не работает

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

Всякий раз, когда я запускаю такой код, он просто добавляет нового ученика каждый раз, когда я отлаживаю программу. Как я могу сделать это, только добавлю его один раз?

+0

Если вам нужно, чтобы я добавил файл Students.txt, мне понадобится помощь, в нем будет более 10 000 студентов. –

+1

'File.Exists' определяет, существует ли указанный файл. Я не понимаю, чего вы пытаетесь достичь, используя его таким образом – Satpal

+0

Я также пробовал newStudent! = Null, который также не работает –

ответ

3

File.Exists определяет, существует ли файл по указанному пути (который для записи необходимо выполнить перед попыткой чтения/записи в файл). Вы пытаетесь выяснить, существует ли данная строка текста в данном файле. Это совсем другая задача.

Вам необходимо прочитать строки в файле и сравнить их с данным текстом.

if(!File.ReadLines(filepath).Contains(newStudent)) 
{ 
    //TODO: Append student to the file 
} 
+0

Спасибо, мне удалось заставить ее работать –

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(); 
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 '[email protected] 4.0)"; 
      // this is where I am getting stumped 
      if (StudentInfo.Contains(newStudent)) 
      { 
       changeFile.Close(); 
      } 
      else 
      { 
       changeFile.WriteLine(newStudent); 
       changeFile.Close(); 
      } 
Смежные вопросы