JustBenji
JustBenji

Reputation: 73

My StreamWriter isn't giving an error, but isn't writing to the .txt file?

Thank you for all your suggestions!

I'm really confused as to why this still isn't working, the 'Customers.txt' is just included in the solution and it opens it fine with the StreamReader, this is my full code :/

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();
    }
}
}

Upvotes: 1

Views: 1325

Answers (2)

cjb110
cjb110

Reputation: 1491

Change the

using (StreamWriter fileWriter = new StreamWriter("Customers.txt"))

line to

using (StreamWriter fileWriter = new StreamWriter(@"C:\Customers.txt"))

if you see a file on c:\ then the problem is the file is being written but not where you expect. Next to the executable is the common location for code like this, but not the only one.

Upvotes: 0

axwcode
axwcode

Reputation: 7824

You are opening the file as many times as your loop runs.

You need to open the file then enter your loop code, then make sure it closes.

StreamWriter file= new StreamWriter(File.Open("fileName.txt", FileMode.CreateNew));

foreach (string element in userDetails.firstName)
{
   file.WriteLine("testing 1 10 11");

}

file.Close();
file.Dispose();

It seems that using will close the file for you, but I still prefer file.Close() and file.Dispose() until I read more on using.

Upvotes: 2

Related Questions