Adding a Line to the Middle of a File with .NET

后端 未结 6 1100
你的背包
你的背包 2020-12-03 21:45

Hello I am working on something, and I need to be able to be able to add text into a .txt file. Although I have this completed I have a small problem. I need to write the st

相关标签:
6条回答
  • 2020-12-03 22:23

    one of the trick is file transaction. first you read the file up to the line you want to add text but while reading keep saving the read lines in a separate file for example tmp.txt and then add your desired text to the tmp.txt (at the end of the file) after that continue the reading from the source file till the end. then replace the tmp.txt with the source file. at the end you got file with added text in the middle :)

    0 讨论(0)
  • 2020-12-03 22:24

    With regular files there's no way around it - you must read the text that follows the line you wish to append after, overwrite the file, and then append the original trailing text.

    Think of files on disk as arrays - if you want to insert some items into the middle of an array, you need to shift all of the following items down to make room. The difference is that .NET offers convenience methods for arrays and Lists that make this easy to do. The file I/O APIs offer no such convenience methods, as far as I'm aware.

    When you know in advance you need to insert in the middle of a file, it is often easier to simply write a new file with the altered content, and then perform a rename. If the file is small enough to read into memory, you can do this quite easily with some LINQ:

    var allLines = File.ReadAllLines( filename ).ToList();
    allLines.Insert( insertPos, "This is a new line..." );
    File.WriteAllLines( filename, allLines.ToArray() );
    
    0 讨论(0)
  • 2020-12-03 22:28

    This is the best method to insert a text in middle of the textfile.

     string[] full_file = File.ReadAllLines("test.txt");
     List<string> l = new List<string>();
     l.AddRange(full_file);
     l.Insert(20, "Inserted String"); 
     File.WriteAllLines("test.txt", l.ToArray());
    
    0 讨论(0)
  • 2020-12-03 22:31

    As others mentioned, there is no way around rewriting the file after the point of the newly inserted text if you must stick with a simple text file. Depending on your requirements, though, it might be possible to speed up the finding of location to start writing. If you knew that you needed to add data after line N, then you could maintain a separate "index" of the offsets of line numbers. That would allow you to seek directly to the necessary location to start reading/writing.

    0 讨论(0)
  • 2020-12-03 22:35

    Check out File.ReadAllLines(). Probably the easiest way.

         string[] full_file = File.ReadAllLines("test.txt");
         List<string> l = new List<string>();
         l.AddRange(full_file);
         l.Insert(20, "Inserted String");
         File.WriteAllLines("test.txt", l.ToArray());
    
    0 讨论(0)
  • 2020-12-03 22:40

    If you know the line index use readLine until you reach that line and write under it. If you know exactly he text of that line do the same but compare the text returned from readLine with the text that you are searching for and then write under that line.

    Or you can search for the index of a specified string and writ after it using th escape sequence \n.

    0 讨论(0)
提交回复
热议问题