我试图通过将联系人存储在文本文件中来制作联系簿。例如,假设我有两个名为first name和surname的字符串,在文本文件中我有一个名字,在下一行有一个姓氏。这是我目前的代码,但我不知道在do循环中我需要做什么,如何读取一行,将其插入字符串xxx,读取下一行并将其存储在字符串yyy中?
public Contacts[] getAllContacts()
{
List<Contacts> theContactList = new List<Contacts>();
string file_name = "Contacts.txt";
string textLine = "";
if (System.IO.File.Exists(file_name) == true)
{
System.IO.StreamReader objReader;
objReader = new System.IO.StreamReader(file_name);
do
{
objReader.ReadLine() + "\r\n";
} while (objReader.Peek() != 1);
}
if (theContactList.Count > 0)
{
return theContactList.ToArray();
}
else
{
return null;
}
}
我还需要能够在文本文件中存储多个联系人和更多字段,例如地址,电话号码等。
答案 0 :(得分:2)
假设在那里总共有2条线并且它们具有相同的顺序,则以下代码可以在那里工作:
public Contacts[] getAllContacts()
{
List<Contacts> theContactList = new List<Contacts>();
string file_name = "Contacts.txt";
string textLine = "";
bool firstNameLine = true;
if (System.IO.File.Exists(file_name) == true)
{
System.IO.StreamReader objReader;
objReader = new System.IO.StreamReader(file_name);
Contact newContact;
do
{
textLine = objReader.ReadLine();
if (firstNameLine)
{
newContact = new Contact();
newContact.firstName = textLine;
}
else
{
newContact.sureName = textLine;
theContactList.Add(newContact);
}
firstNameLine = !firstNameLine;
} while (objReader.Peek() != 1);
}
if (theContactList.Count > 0)
{
return theContactList.ToArray();
}
else
{
return null;
}
}
因此代码在这种情况下使用一个布尔变量,它定义了哪个行读取用于填充哪个字符串。如果它超过2行(超过2个字符串)则需要一个整数变量(增加+1,然后在读取所需的最后一行时重置)而不是if if switch语句。
答案 1 :(得分:2)
可能最好使用XML或CSV文件,甚至只是一个文本文件,但每个&#34;联系人&#34;在同一条线上解析它们。
以下代码将执行您想要的操作。
public Contacts[] GetAllContacts()
{
List<Contacts> contacts = new List<Contacts>();
const string filePath = "Contacts.txt";
if (File.Exists(filePath))
{
using (StreamReader sr = new StreamReader(filePath))
{
do
{
Contacts contact = new Contacts();
contact.FirstName = sr.ReadLine();
contact.Surname = sr.ReadLine();
contacts.Add(contact);
} while (sr.Peek() != -1);
}
}
return contacts.ToArray();
}
答案 2 :(得分:1)
while (objReader.Peek() != -1)
{
theContactList.Add(new Contact() { Firstname = objReader.ReadLine(), SurName = objReader.ReadLine()});
}
使用初始化列表。 (显然对Contact
类成员做出假设)
答案 3 :(得分:0)
使用它:
string [] file_array = File.ReadAllLines("path");
PS: using System.IO;
此函数读取整个文件并将其行存储在数组中,您可以编辑数组行,然后使用
File.WriteAllLines("path",file_array);
将它们放回文件中。