Wpis z mikrobloga

#programowanie
Mireczki pewien mały problem w C# mam program który czyta wyrazy z jednego pliku i zapisuje je w odwrotnej kolejności. Robię to w ten sposób jednak po zamknięciu pliku nie mogę go znowu zainicjalizować ponieważ wyskakuje błąd "Plik jest używany przez inny proces"

public static void Odwroc(string nazwa1, string nazwa2)
{
int licznik = 0;
StreamWriter sw = null;
StreamReader sr = null;
sr = new StreamReader(nazwa1);
sw = new StreamWriter(nazwa2);
while(!sr.EndOfStream)
{
sr.ReadLine();
licznik++;
}

sr.Close();
sr = new StreamWriter(nazwa2);

string[] tablica = new string[licznik];
for (int i = 0; i < licznik; i++)
{
tablica[i] = sr.ReadLine();
}
sr.Close();
for (int i = licznik-1; i > -1 ; i--)
{
sw.WriteLine(tablica[i]);
}
sw.Close();

}

Jak to zrobić
  • 15
@banneh: Generalnie można to zrobić szybciej (znając wykopków, to jeszcze ktoś mnie poprawi w kodzie)

public static void Odwroc(string nazwa1, string nazwa2)
{
string[] lines = File.ReadAllLines (nazwa1);
StreamWriter sw = new StreamWriter (nazwa2);

for(int i=lines.Length-1; i>=0; i--)
{
sw.WriteLine (lines [i]);
}
sw.Flush ();
sw.Close ();
}

Dobrze by było na początku sprawdzić plik istnieje.
@BoKoR: W kodzie miałem StreamReader tylko się jebnąłem dopisując ten kawałek bo już nie miałem go w kodzie.
Udało mi się wskaźnik zresetować używając seeka, jednak teraz pojawił mi się taki problem że do tablicy wyrazy są zapisywane bez polskich znaków. Problem występuje tylko przy używaniu StreamWritera
@banneh: kodowanie musisz ustawić.

Tutaj masz swoją pierwszą metodę:

public static void Odwroc(string nazwa1, string nazwa2)
{
int licznik = 0;
StreamWriter sw = null;
StreamReader sr = null;
sr = new StreamReader(nazwa1,System.Text.Encoding.UTF8);
sw = new StreamWriter(nazwa2,false,System.Text.Encoding.UTF8);
while(!sr.EndOfStream)
{
sr.ReadLine();
licznik++;
}
sr.Close();
sr = new StreamReader(nazwa1,System.Text.Encoding.UTF8);
string[] tablica = new string[licznik];
for (int i = 0; i < licznik; i++)
{
tablica[i] = sr.ReadLine();
}
sr.Close();
for (int i =
@banneh:
Metoda podana przez @BoKoR: @freerunner9: zadziala dla stosunkowo małych plików. Jakbym wrzucił kilku gigowy plik to takie coś by trwało wieczność lub w ogóle by się nie wykonało. Ale jeśli to tylko jakieś zadanie do szkoły/studia/domowy program któremu taka sytuacja nigdy się nie wydarzy, to rozwiązanie (szczególnie @freerunner9) 100% poprawne.

@freerunner9 - using nie jest taki niezbędny, skoro wywłuje tam Close. Dla porządku jedynie te Close
@BoKoR: Nie pomogło niestety dalej mam problem z Polskimi znakami tak teraz wyglądam mój kod:

public static void Odwroc(string nazwa1, string nazwa2)
{
int licznik = 0;
StreamWriter sw = null;
StreamReader sr = null;
sr = new StreamReader(nazwa1, Encoding.UTF8);
sw = new StreamWriter(nazwa2, false, Encoding.UTF8);
while(!sr.EndOfStream)
{
sr.ReadLine();
licznik++;
}
sr.Close();
sr = new StreamReader(nazwa1, Encoding.UTF8);

string[] tablica = new string[licznik];
for (int i = 0; i < licznik; i++)