Ustawienie wskaźnika zapisu na koniec pliku

0

Witam.

 string imie, nazwisko;
            int numt;
            TextWriter zapis = new StreamWriter("dane.txt");

            for (int i = 0; i < 4; i++)
            {

            Console.WriteLine("imie");
            imie = Console.ReadLine();
            Console.WriteLine("nazwisko");
            nazwisko = Console.ReadLine();
            Console.WriteLine("numtel");
            numt = System.Convert.ToInt32(Console.ReadLine());


            zapis.Write(imie + " " + nazwisko + " " + numt + "\n\r\t");
            }
            zapis.Close();
         

Witam mam takie pytanie jak ustawić wskaźnik na końcu pliku po kolejnym otworzeniu zapisu

0

Nic nie da ustawienie wskaźnika na końcu pliku, gdyż w podanym przez Ciebie kodzie, plik jest nadpisywany przez nowy pusty, także powinieneś raczej otworzyć ten plik w trybie dopisywania (append) a wskaźnik automatycznie umieści się na końcu pliku. Zrób poprawkę:

TextWriter zapis = new StreamWriter("dane.txt", true);
0

Jak dobrze zrozumiałem powiano to wyglądać tak

 public void zapis()
        {
            string imie, nazwisko;
            int numt;
            if (!File.Exists("dane.txt"))
            {
                TextWriter zapis = new StreamWriter("dane.txt");
                for (int i = 0; i < 4; i++)
                {

                    Console.WriteLine("imie");
                    imie = Console.ReadLine();
                    Console.WriteLine("nazwisko");
                    nazwisko = Console.ReadLine();
                    Console.WriteLine("numtel");
                    numt = System.Convert.ToInt32(Console.ReadLine());


                    zapis.Write(imie + " " + nazwisko + " " + numt + "\n\r\t");
                }
                zapis.Close();
        
            }
            else
            {
                TextWriter zapis = new StreamWriter("dane.txt", true);
                for (int i = 0; i < 4; i++)
                {

                    Console.WriteLine("imie");
                    imie = Console.ReadLine();
                    Console.WriteLine("nazwisko");
                    nazwisko = Console.ReadLine();
                    Console.WriteLine("numtel");
                    numt = System.Convert.ToInt32(Console.ReadLine());


                    zapis.Write(imie + " " + nazwisko + " " + numt + "\n\r\t");
                }
                zapis.Close();
        
            }
            
        }
0

A najlepiej zlikwidować jeszcze to powielanie kodu.

0

Wiem.
że powino wygladać to tak:

public void zapis()
        {
            string imie, nazwisko;
            int numt;
            if (!File.Exists("dane.txt"))
            {
                TextWriter zapis = new StreamWriter("dane.txt");
            }
            else
            {
                TextWriter zapis = new StreamWriter("dane.txt", true);
            }
            for (int i = 0; i < 4; i++)
            {

            Console.WriteLine("imie");
            imie = Console.ReadLine();
            Console.WriteLine("nazwisko");
            nazwisko = Console.ReadLine();
            Console.WriteLine("numtel");
            numt = System.Convert.ToInt32(Console.ReadLine());


            zapis.Write(imie + " " + nazwisko + " " + numt + "\n\r\t");
            }
            zapis.Close();
        
        }
 

Ale wyskakuje mi napis z błedem

0

Nie musisz sprawdzać czy plik istnieje, wystarczy samo

TextWriter zapis = new StreamWriter("dane.txt", true);

Jeśli pliku nie będzie, to zostanie on automatycznie utworzony.

Ale wyskakuje mi napis z błedem

Super... a jaki to napis?

0
kult napisał(a):

Ale wyskakuje mi napis z błedem

Super... a jaki to napis?

Pewnie związany z tym, że TextWriter zapis ma w if-else.

0

"Error 1 'ConsoleApplication1.plikowa.zapis()' is a 'method', which is not valid in the given context c:\users\kiui\documents\visual studio 2010\Projects\c#2\ConsoleApplication1\ConsoleApplication1\Program.cs 43 13 ConsoleApplication1
" error

0

nie umiesz czytać "napisów z błędem" i korzystać z google.
metodę wklej do klasy, a nie do namespace'a czy do metody main, a wywołuj ją obiekt.zapis(), a nie obiekt.zapis;.

kolejny etap doprowadzania Twojego kodu do ładu:

		public void zapis()
		{
			string imie, nazwisko;
			int numt;
			TextWriter zapis;

			if (!File.Exists("dane.txt"))
			{
				zapis = new StreamWriter("dane.txt");
			}
			else
			{
				zapis = new StreamWriter("dane.txt", true);
			}
			for (int i = 0; i < 4; i++)
			{
				// ...
			}
			zapis.Close();

		}

i następny:

		public void zapis()
		{
			// ...
			TextWriter zapis = File.Exists("dane.txt") ? new StreamWriter("dane.txt", true) : new StreamWriter("dane.txt");
			// ...
		}

i jeszcze jeden:

			// ...
			TextWriter zapis = new StreamWriter("dane.txt", File.Exists("dane.txt"));
			// ...

i ostatni, uwzględniający to, że nie umiesz też czytać dokumentacji - StreamWriter tworzy plik jeśli go nie znajdzie, nawet jeśli ma ustawione append.

		public void zapis()
		{
			string imie, nazwisko;
			int numt;
			using (var zapis = new StreamWriter("dane.txt", true)) // wszystko co implementuje IDisposable tworzysz w using
			{
				for (int i = 0; i < 4; i++)
				{
					// ...
				}
				zapis.Close();
			}

		}
0

Nie już to zrobiłem można to zamknąć. Dziękuje za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1