//
// Copyright (c) 2002
// Ronald Kevin Burton
//
// Z poniższym kodem nie jest związana żadna gwarancja poprawności działania.
// Program został dołączony do książki ".NET CLR. Księga eksperta" w celu
// ilustracji koncepcji i zasad przedstawionych w tej książce. Program może być 
// używany na własne ryzyko.
//
// Przyznaje się prawo do użycia lub kopiowania tego oprogramowania do dowolnego celu
// bez konieczności ponoszenia żadnych opłat pod warunkiem, że powyższe uwagi zostaną 
// zachowane we wszystkich kopiach. Przyznaje się także prawo do modyfikacji kodu
// i dystrybucji zmodyfikowanego kodu pod warunkiem zachowania powyższych uwag
// oraz dołączenia informacji mówiącej o modyfikacji kodu.
//
// 
using System;
using System.IO;
using System.IO.IsolatedStorage;
using System.Diagnostics;

namespace CLRUnleashed
{
	/// <summary>
	/// Podsumowanie dla IsolatedStorageTest.
	/// </summary>
	class IsolatedStorageTest
	{
		/// <summary>
		/// Główny punkt wejścia dla aplikacji.
		/// </summary>
		[STAThread]
		static void Main(string[] args)
		{
			IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForAssembly();
			Console.WriteLine(string.Format("Tożsamość podzespołu: {0}", isf.AssemblyIdentity));
			Console.WriteLine(string.Format("Aktualna wielkość: {0}", isf.CurrentSize));
			Console.WriteLine(string.Format("Maksymalna wielkość: {0}", isf.MaximumSize));
			Console.WriteLine(string.Format("Zakres: {0}", isf.Scope));

			// Poniższy fragment kodu sprawdza, czy plik już istnieje.
			string[] fileNames = isf.GetFileNames("TestStore.txt");
			foreach (string file in fileNames)
			{
				if(file == "TestStore.txt")
				{

					Console.WriteLine("Plik już istnieje");
					Console.WriteLine("Wpisz \"StoreAdm /REMOVE\" w wierszu poleceń, aby usunąć wszystkie izolowane magazyny dla tego użytkownika.");

					// Wyjście z programu.
					isf.Close();
					return;
				}
			}

			writeToFile(isf);

			Console.WriteLine("Plik \"TestStore.txt\" zawiera:");

			// Wywołanie readFromFile i zapisanie otrzymanego ciągu
			// do konsoli.

			Console.WriteLine(readFromFile(isf));

			// Wyjście z programu.
			isf.Close();
		}

		// Ta metoda zapisuje "Witaj izolowany magazynie" do pliku.
		private static void writeToFile(IsolatedStorageFile isoStore)
		{

			// Deklaracja nowego StreamWritera.

			StreamWriter writer = null;

			// Przydzielenie StreamWritera do magazynu i pliku TestStore.

			writer = new StreamWriter(new IsolatedStorageFileStream("TestStore.txt", FileMode.CreateNew,isoStore));

			// Zapisanie "Witaj izolowany magazynie" w magazynie.

			writer.WriteLine("Witaj izolowany magazynie");

			writer.Close();
      
			Console.WriteLine("Dokonano zapisu do pliku.");

		}
		// Ta metoda odczytuje pierwszy wiersz pliku "TestStore.txt".

		public static String readFromFile(IsolatedStorageFile isoStore)
		{

			// Poniższy kod otwiera plik TestStore.txt i odczytuje ciąg.

			StreamReader reader = new StreamReader(new IsolatedStorageFileStream("TestStore.txt", FileMode.Open,isoStore));

			// Odczyt wiersza z pliku i dodanie go do sb.

			String sb = reader.ReadLine();

			// Zamknięcie StreamReadera.

			reader.Close();

			// Zwrócenie ciągu.

			return sb.ToString();

		}// Koniec readFromFile.

	}
}
