Strona 1 z 1

masowy zapis zawartości plików .txt

PostNapisane: Wt maja 20, 2014 9:11 am
przez wladekarek
Witam!

Dla celów treningowych pisze program, który we wszystkich plikach .txt w folderze, napisze linijkę "nowalinijka" tuż pod wersem "staralinijka", jeżeli takowa wystąpi.

wyskrobałem coś takiego:
Kod: Zaznacz cały
//klasy kolejno odczytujące i zapisujące pliki .txt
//docelowo *.txt powinno oznaczać "każdy plik w folderze"
//niestety, już ta pierwsza linijka mi wysypuje mi się
StreamReader objReader = new StreamReader("c:\\nowy folder/*.txt");
StreamWriter objWriter = new StreamWriter("c:\\nowy folder/*txt");

//inicjujemy elementy, które będą zawierały odczytaną treść (o ile dobrze to rozumiem)
            string sLine = "";
            ArrayList arrText = new ArrayList();

//Do końca pliku
            while (sLine != null)
            {
                sLine = objReader.ReadLine();
                if (sLine != null)
                    arrText.Add(sLine);
                if (sLine == "staralinijka")
                    objWriter.WriteLine("nowalinijka");
            }

//i kończymy pracę
            objReader.Close();
objWriter.Close();





Czy zna ktoś lepszy sposób na wykonanie tej operacji, lub jest w stanie wskazać błąd w moim toku myślowym?
Z góry dziękuję za odpowiedź :)

Re: masowy zapis zawartości plików .txt

PostNapisane: Wt maja 20, 2014 11:18 am
przez wladekarek
Częściowo rozwiązałem problem dla jednego pliku. Tworzę dwie tablice, jedna będzie przechowywała dane z pliku .txt:
string[] lines = System.IO.File.ReadAllLines(@"C:\jakisfolder\jakisplik.txt");

druga będzie dłuższa od poprzedniej o 1, ponieważ wartość, którą dopiszemy wystąpi w pliku tylko raz, lub wcale. Do tej właśnie tablicy, tymczasowo, wrzucimy dane z pliku, które są już w tablicy lines.
string[] newLines = new string[lines.Length +1];

następnie inicjalizuje wartośc, która pozwoli mi przeskoczyć linijkę podczas kopiowania zawartości tablic.
int Licznik=0

Przedostatnim krokiem będzie przekopiowanie zawartości tablic z lines do newLines, ale z wstawieniem nowej wartości "nowalinijka" po "juzjest"

for (int i = 0; i < lines.Length; i++)
{

if (lines[i] == "juzjest")
{
newLines[i+Licznik] = "nowalinijka";
Licznik++;
}
else
newLines[i + Licznik] = lines[i];
}

Na koniec pozostaje wstawić zawartość newLines do pliku, ale to niestety nie chce działać :(
System.IO.File.WriteAllLines(@"C:\jakisfolder\jakisplik.txt", newLines);


Na szczęście w nieszczęściu, wiem, że nie mogę także stworzyć nowego pliku używając:
System.IO.File.CreateText("C:\\moj.txt");
ponieważ na windowsie 8 jest to utrudnione, ale z tym sobie poradzę.

Stąd moje pytanie: jak to zautomatyzować na wszystkie pliki .txt w folderze?

Re: masowy zapis zawartości plików .txt

PostNapisane: Wt maja 20, 2014 3:33 pm
przez xxSlayeRxx
ale Ty sie nakombinujesz :D

Kod: Zaznacz cały
foreach (var file in Directory.GetFiles("sciezka do folderu")
{
   var lines = File.ReadAllLines(file).ToList();
   var indexOfLine = lines.IndexOf("staralinijka");
   if (indexOfLine >= 0) lines.Insert(indexOfLine+1, "nowa linijka");
   File.WriteAllLines(file,lines)
}

Re: masowy zapis zawartości plików .txt

PostNapisane: Pn maja 26, 2014 11:54 am
przez wladekarek
Simple Smart :)
Brak wiedzy faktycznie komplikuje życie programisty.
Wielkie dzięki za kod, poczytam sobie o tym czego użyłeś.