File editing without changing structure

Posted on 2006-03-22
Last Modified: 2010-04-16

 File editing without changing structure

   I am trying to open and edit a tab delimited file. I need to replace one column header with a token. I am able to open and edit the file, however, the file structure ends up changing.

For example, if I have a file "data.txt" with a column name "Email" on the first line and I want to replace this with a standard token "Your Email"

I can read the line and use a regular expression to replace the column name with the token. Now when I try to write the line back into the same file using the WriteLine method of a streamwriter it overwrites part of the second line of "data.txt"

Is there a way I can go into files and edit parts of it without chainging the file. I know it can be done in Java, but is it possible in C##

I dont want to create a new file, only edit the current file I have



For reference this is what I am doing




sr = new StreamReader(filename);

//create a StreamReader to read file

String line;

line = sr.ReadLine();

//read first line of the file



sb = new FileStream(filename, FileMode.OpenOrCreate);

//create a new file stream with Open or Create access

sw = new StreamWriter(sb);

int k = token.Length;

 // If you just use the StreamWriter without wrapping it in FileStream you overwrite the file.

// It does not replace the first line. FileMode.OpenOrCreate lets you open the file and write to it.



for(int i=0;i<email.Length - k ;i++)


token = token + " ";


string line1 = Regex.Replace(line, email, token, RegexOptions.Compiled|RegexOptions.Singleline|RegexOptions.IgnoreCase);

//replace occurence of email with desired token case insensitive


//Write to the file








catch (Exception e)














Question by:kusanagi
    LVL 85

    Expert Comment

    by:Mike Tomlinson
    If you don't want to use a secondary file then you need to store the ENTIRE new file in memory and then overwrite the file with the changes all at once.

    Read the source file line by line and store each changed line in a StringBuilder for instance.  Then close the file and reopen it in write mode.  Now write out the changed lines from StringBuilder all at once, overwriting what was already there.

    Author Comment

    I am trying to save the time it takes to overwrite the whole file. What you said is my current solution.
    However, I will be looking at very large files and I will always have to make a change to only the first line.
     I don't want to resort to overwriting the whole file if I have an alternate.
    I know there are utilities in Unix to do this but I want to do this in C##
    LVL 85

    Accepted Solution


    You said you want to change "Email" to "Your Email".  This means that all the rest of the data beyond that point in the file would have to SHIFT to the right to make space for the extra characters "Your ".  You can't do this in place with file operations...that just isn't how files work.  =\

    If you were changing the data to something else that had the same length (thus no shifting), then it would be possible to move the file pointer and simply overwrite the data that is already there.

    If you are dealing with very large files then I don't think you should keep the entire file in memory either.

    A secondary file makes the most sense here.

    Featured Post

    How to run any project with ease

    Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
    - Combine task lists, docs, spreadsheets, and chat in one
    - View and edit from mobile/offline
    - Cut down on emails

    Join & Write a Comment

    Introduction                                                 Was the var keyword really only brought out to shorten your syntax? Or have the VB language guys got their way in C#? What type of variable is it? All will be revealed.   Also called…
    This article introduced a TextBox that supports transparent background.   Introduction TextBox is the most widely used control component in GUI design. Most GUI controls do not support transparent background and more or less do not have the…
    It is a freely distributed piece of software for such tasks as photo retouching, image composition and image authoring. It works on many operating systems, in many languages.
    how to add IIS SMTP to handle application/Scanner relays into office 365.

    732 members asked questions and received personalized solutions in the past 7 days.

    Join the community of 500,000 technology professionals and ask your questions.

    Join & Ask a Question

    Need Help in Real-Time?

    Connect with top rated Experts

    21 Experts available now in Live!

    Get 1:1 Help Now