【发布时间】:2014-10-16 06:34:18
【问题描述】:
感谢您的所有建议!
我真的很困惑为什么这仍然不起作用,“Customers.txt”只是包含在解决方案中,它可以用 StreamReader 打开它,这是我的完整代码:/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace CustomerDetails
{
class Program
{
class userDetails
{
public static List<string> firstName;
public static List<string> lastName;
public static List<string> telNumber;
public static List<string> birthDate;
public static List<string> postCode;
public static string userDecision;
}
static void Main(string[] args)
{
int x = 1;
userDetails.firstName = new List<string>();
userDetails.lastName = new List<string>();
userDetails.birthDate = new List<string>();
userDetails.telNumber = new List<string>();
userDetails.postCode = new List<string>();
while (x == 1)
{
Console.WriteLine("------------------------------");
Console.WriteLine(" CUSTOMER DATABASE ");
Console.WriteLine("------------------------------");
Console.WriteLine("1.) Add Customer(s)");
Console.WriteLine("2.) List Customers");
Console.WriteLine("3.) Exit");
Console.WriteLine("------------------------------");
userDetails.userDecision = Console.ReadLine().Trim().ToUpper().Replace(" ", "");
if (userDetails.userDecision == "1" ||
userDetails.userDecision == "2" ||
userDetails.userDecision == "3")
break;
else
Console.Clear();
}
if (userDetails.userDecision == "3") { Environment.Exit(0); }
Console.Clear();
Console.WriteLine("------------------------------");
Console.WriteLine(" CUSTOMER DATABASE ");
Console.WriteLine("------------------------------");
if (userDetails.userDecision == "1")
{
int y = 0;
while (y > -1)
{
string input;
Console.Clear();
Console.WriteLine("------------------------------");
Console.WriteLine(" NEW CUSTOMER ");
Console.WriteLine("------------------------------");
Console.Write("First Name: ");
userDetails.firstName.Add(Console.ReadLine());
Console.Write(" Last Name: ");
userDetails.lastName.Add(Console.ReadLine());
Console.Write(" DOB: ");
userDetails.birthDate.Add(Console.ReadLine());
Console.Write("Tel Number: ");
userDetails.telNumber.Add(Console.ReadLine());
Console.Write(" Post Code: ");
userDetails.postCode.Add(Console.ReadLine());
Console.WriteLine("------------------------------");
int e = 0;
while (e == 0)
{
Console.Write("Add Another? Y/N:");
userDetails.userDecision = Console.ReadLine().ToUpper();
if (userDetails.userDecision == "Y" || userDetails.userDecision == "N")
e = 1;
}
if (userDetails.userDecision == "N")
{
break;
}
}
StreamWriter fileWriter = new StreamWriter(File.Open("Customers.txt", FileMode.Append));
int v = 0;
foreach (string element in userDetails.firstName)
{
fileWriter.WriteLine("/-----------\\");
fileWriter.WriteLine(userDetails.firstName[v]);
fileWriter.WriteLine(userDetails.lastName[v]);
fileWriter.WriteLine(userDetails.postCode[v]);
fileWriter.WriteLine(userDetails.birthDate[v]);
fileWriter.WriteLine(userDetails.telNumber[v]);
fileWriter.WriteLine("\\-----------/");
v++;
Console.WriteLine("DOING.");
}
fileWriter.Dispose();
fileWriter.Close();
Console.WriteLine("DONE.");
Console.ReadLine();
}
// LIST CUSTOMER DETAILS
//else if (userDetails.userDecision == "2")
//{
// StreamReader fileReader = new StreamReader("Customers.txt");
// string currentLine = "";
// while (currentLine != null)
// {
// currentLine = fileReader.ReadLine();
// if (currentLine != null) {
// if (currentLine != "/-----------\\") {
// if(currentLine == "\\-----------/")
// Console.WriteLine();
// else
// Console.WriteLine(currentLine); } }
// }
// fileReader.Close();
//}
//Console.ReadLine();
}
}
}
【问题讨论】:
-
您确定要重复循环打开文件吗?你能不能想出一个简短但完整的例子,我们可以自己编译(例如,我不知道
userDetails实际上是什么) -
您确定它没有写入您未查看的位置的文件吗?因为你没有指定路径,它会在应用程序认为是其当前目录的任何地方打开文件(不一定是它运行的目录)。
-
无关:您的
userDetails似乎是一个包含多个列表的对象。看起来更好的结构化数据的方法是拥有一个具有所需属性(firstName、lastName等)的UserDetail类作为单个值,然后让userDetails成为一个包含对象的单个列表类型为UserDetail。 -
顺便说一句:@ErikFunkenbusch 是对的。我刚刚复制了你的代码,它可以工作。但它会写入应用程序“当前目录”中的
Customer.txt。最有可能在项目的Debug或Release文件夹中。
标签: c# .net visual-studio streamwriter