2014-02-18 7 views
0

Это вопрос для новичков, но истинным является то, что мне никогда не нужно использовать такой метод!
Так я буду нуждаться терпение ..
Я несколько строк с именем t1, t2, t3, t4 ... и я хочу, чтобы записать их в файл, по одному каждой строке
так я открыть файл. .Запись в файл с использованием цикла for

string t1 = "aaa"; 
string t2 = "bbb"; 
string t3 = "ccc"; 
//10 strings 

for (int i = 1; i<= 10; i++) 
{ 
    string key = "t" + i; 
    strLine = convertToFile(key); 
    f.WriteLine(strLine); 
} 
f.Close(); 

Как все это я получаю в файле
t1
t2
t3

ответ

0

лучше хранить ваши строки в List<string>, а затем использовать этот метод:

File.WriteAllLines(filePath, lines); 

будет хранить список строк в файле на filePath

создать список из ваших строк сделать:

var lines = new List<string>{ t1, t2, t3, t4, t5, t6, t7, t8, t9, t10}; 
+0

, которая была оригинальная идея .. но я пытался сделать по-другому. –

+0

@ user3061846 Почему вы хотели бы сделать это по-другому? – wudzik

+0

Потому что мне нужно выполнить несколько операций с этими строками, поэтому я пытался упростить ... Но я просто понял, что я усложняю код ... Спасибо –

3

Используйте коллекцию вместо отдельных переменных:

var allStrings = new List<string>(); 
allStrings.Add("aaa"); 
allStrings.Add("bbb"); 
allStrings.Add("ccc"); 
// ... 

using (StreamWriter w = File.AppendText(path)) 
{ 
    foreach(string str in allStrings) 
     w.WriteLine(str); 
} 

или более кратким с использованием File.WriteAllLines:

File.WriteAllLines(path, allStrings); 
1

Простой, как

StringBuilder sb = new StringBuilder(); 

sb.AppendLine("aaa"); 
sb.AppendLine("bbb"); 
sb.AppendLine("ccc"); 

System.IO.File.WriteAllText("D:\fileName.txt", sb.ToString()); 
1

Дело в том, что вы не можете получить доступ к переменным в пути код очерчивает. То, что вы делаете в цикле for, - это создание имени переменной для доступа. Но вы просто генерируете строку, названную как ваши переменные, но вы не можете получить к ней доступ через строку. Переменная в C# является ссылкой, имя, которое вы ей даете, не имеет большого значения. Таким образом, все ответы выше решают вашу проблему, но вы должны внимательно подумать о ожидаемом вами результате от своего кода и о том, почему это не работает.

1

Если вы пытаетесь преобразовать строку (возможно, от пользователя) в локальную переменную, вам лучше использовать if или case.

for (int i = 1; i <= 10; i++) 
      { 
       string key = "t" + i; 
       if (key == "t1") 
       { 
       f.WriteLine(t1); 
       } 
       else if (key == "t2") 
       { 
       f.WriteLine(t2); 
       } 

      } 

Или построить на Ответ Тима Schmelter в

var t = new List<string>(); 
     t.Add("aaa"); 
     t.Add("bbb"); 
     t.Add("ccc"); 
     // ... 

     using (StreamWriter w = File.AppendText(path)) 
     { 
      for (int i = 1; i <= 10; i++) 
      { 
       string key = "t"+i; 

       if (key == "t1") 
       { 
       w.WriteLine(t[1]); 
       } 
       else if (key == "t2") 
       { 
        w.WriteLine(t[2]); 
       } 

      } 

     } 

Или без строки

  for (int i = 1; i <= 10; i++) 
      { 
       w.WriteLine(t[i]); 
      } 
+0

first: почему вы используете несколько if's? Во-вторых: почему вы строите ключ во втором примере? Почему бы и нет: 't [i]'? Упростите свой код. – wudzik

+0

Построение ключа в цикле, потому что вопроситель построил ключ в цикле. Для ясности я добавлю третий пример без строки. – AAberdeen

Смежные вопросы