none
Práce s textovým souborem

    Dotaz

  • Ahoj jsme začátekčník a potřebuji poradit. Mám textový soubor do kterého mi program vypsal hodnoty pod sebe a já potřebuji například hodnotu na 3. řádku přepsat nevím si rady. Děkuji moc.
    úterý 21. července 2009 13:54

Odpovědi

  • Pro práci se soubory slouží třídy v namespace System.IO, v nejednodušším případě pak pomocná třída File, popř. StreamReader a StreamWriter.
    V případě malých souborů je nejrychlejší a nejjednodušší možnost přečíst celý soubor do paměti, provést změnu a zapsat soubor na disk.
    Něco jako (píšu z paměti, budete si muset poladit):
    string fileContent;
    
    using (StreamReader sr = File.OpenText(@"C:\MyFile.txt"))
    {
      fileContent = sr.ReadToEnd();
    }
    
    // transformace fileContent, změna třetího řádku
    
    using (StreamWriter sw = File.CreateText(@"C:\MyNewFile.txt"))
    {
      sw.Write(fileContent);
    }

    Robert Haken, Microsoft MVP ASP/ASP.NET, HAVIT, s.r.o., www.havit.cz, http://knowledge-base.havit.cz
    úterý 21. července 2009 14:20
    Moderátor
  • Aha, no tak to můžete buď použít v cyklu myLine = sr.ReadLine() a číst soubor po řádcích. Nebo udělat třeba string[] lines = fileContent.Split('\n') a rozdělit si to na pole řádek, následně lines[3] = novaHodnota; a třeba fileContent = String.Join(lines, "\n");

    ad Nahrazení - můžete třeba původní soubor smazat File.Delete() a nový přejmenovat File.Move()

    Nebo byste to celý musel dělat přes ReadWrite přístup, otevřít si FileStream, doSeekovat se na třetí řádek, ten překopat, atp. Ale to se vyplatí jen u velkých souborů.
    Robert Haken, Microsoft MVP ASP/ASP.NET, HAVIT, s.r.o., www.havit.cz, http://knowledge-base.havit.cz
    úterý 21. července 2009 17:51
    Moderátor

Všechny reakce

  • Pro práci se soubory slouží třídy v namespace System.IO, v nejednodušším případě pak pomocná třída File, popř. StreamReader a StreamWriter.
    V případě malých souborů je nejrychlejší a nejjednodušší možnost přečíst celý soubor do paměti, provést změnu a zapsat soubor na disk.
    Něco jako (píšu z paměti, budete si muset poladit):
    string fileContent;
    
    using (StreamReader sr = File.OpenText(@"C:\MyFile.txt"))
    {
      fileContent = sr.ReadToEnd();
    }
    
    // transformace fileContent, změna třetího řádku
    
    using (StreamWriter sw = File.CreateText(@"C:\MyNewFile.txt"))
    {
      sw.Write(fileContent);
    }

    Robert Haken, Microsoft MVP ASP/ASP.NET, HAVIT, s.r.o., www.havit.cz, http://knowledge-base.havit.cz
    úterý 21. července 2009 14:20
    Moderátor
  • Já mám právě problém v tý transformaci nevím jak poupravit ten 3. řádek a nahradit ten starý txt.
    úterý 21. července 2009 15:36
  • Aha, no tak to můžete buď použít v cyklu myLine = sr.ReadLine() a číst soubor po řádcích. Nebo udělat třeba string[] lines = fileContent.Split('\n') a rozdělit si to na pole řádek, následně lines[3] = novaHodnota; a třeba fileContent = String.Join(lines, "\n");

    ad Nahrazení - můžete třeba původní soubor smazat File.Delete() a nový přejmenovat File.Move()

    Nebo byste to celý musel dělat přes ReadWrite přístup, otevřít si FileStream, doSeekovat se na třetí řádek, ten překopat, atp. Ale to se vyplatí jen u velkých souborů.
    Robert Haken, Microsoft MVP ASP/ASP.NET, HAVIT, s.r.o., www.havit.cz, http://knowledge-base.havit.cz
    úterý 21. července 2009 17:51
    Moderátor