Solved

Truncate and Append file in C#

Posted on 2004-08-20
6
7,881 Views
Last Modified: 2008-02-26
Hi All,

Can someone please give me some sample code that would show how to truncate one file by 512K and then append 511K back to the original file from the last 511K of a another source file.  In psuedocode here is what I am trying to do:

//Get handle to the file to truncate
FileInfo f = new FileInfo("c:\\FiletoTruncate.txt");
FileStream s = f.Open(FileMode.Truncate);

// Need help here, how do I truncate by 512K?????

// Get 511K of a new file an append to file above
FileInfo appendFile = new FileInfo("c:\\getLast511K.txt");

// Need help in getting the last 511K of this and appending it to the first file


0
Comment
Question by:zozig
  • 5
6 Comments
 
LVL 10

Expert Comment

by:eternal_21
ID: 11852902
The System.IO.FileMode.Truncate flag opens the file for writing, but deletes all the data... it truncates the file to 0 bytes only.

I suggest that you:

 1. Open the file and read all but the last 512K of data into a byte[] buffer.
 2. Read the 511K Segment to another buffer.
 3. Truncate the file.
 4. Write the first buffer to the file.
 5. Write the 511K segment to the file.
0
 
LVL 10

Expert Comment

by:eternal_21
ID: 11852953
1.

  System.IO.FileInfo truncateFileInfo;
  truncateFileInfo = new System.IO.FileInfo("c:\\FiletoTruncate.txt");

  System.IO.FileStream fileStream;
 
  fileStream = truncateFileInfo.Open(System.IO.FileMode.Open);
  byte[] truncateBuffer;
  using(fileStream)
  {
    truncateBuffer = new byte[fileStream.Length - 0x80000];
    fileStream.Read(truncateBuffer, 0, truncateBuffer.Length);
  }
0
 
LVL 10

Expert Comment

by:eternal_21
ID: 11852983
2. Read your 511K segment into another buffer (called appendBuffer), and then finally:
0
Windows Server 2016: All you need to know

Learn about Hyper-V features that increase functionality and usability of Microsoft Windows Server 2016. Also, throughout this eBook, you’ll find some basic PowerShell examples that will help you leverage the scripts in your environments!

 
LVL 10

Expert Comment

by:eternal_21
ID: 11852990
3., 4., 5.

  fileStream = truncateFileInfo.Open(System.IO.FileMode.Truncate);
  using(fileStream)
  {
    fileStream.Write(truncateBuffer, 0, truncateBuffer.Length);
    fileStream.Write(appendBuffer, 0, appendBuffer.Length);
  }
0
 
LVL 10

Accepted Solution

by:
eternal_21 earned 500 total points
ID: 11853456
Second attempt is a little cleaner...  Doesn't require you to load massive files into memory...

### C#.NET ###

  const string TRUNCATE_FILENAME = "c:\\FiletoTruncate.txt";
  const int TRUNCATE_LENGTH = 0x80000;

  const string APPEND_FILENAME = "c:\\getLast511K.txt";
  const int APPEND_LENGTH = 0x7FC00;

  System.IO.FileStream truncateFileStream;
  truncateFileStream = new System.IO.FileStream(TRUNCATE_FILENAME, System.IO.FileMode.Open);
 
  using(truncateFileStream)
  {
    byte[] appendBuffer;

    System.IO.FileStream appendFileStream;
    appendFileStream = new System.IO.FileStream(APPEND_FILENAME, System.IO.FileMode.Open);
    using(appendFileStream)
    {
      appendFileStream.Seek(-APPEND_LENGTH, System.IO.SeekOrigin.End);
      appendBuffer = new byte[APPEND_LENGTH];
      appendFileStream.Read(appendBuffer, 0, APPEND_LENGTH);
    }

    truncateFileStream.SetLength(truncateFileStream.Length - TRUNCATE_LENGTH);
    truncateFileStream.Seek(0, System.IO.SeekOrigin.End);
    truncateFileStream.Write(appendBuffer, 0, APPEND_LENGTH);
  }

###
0
 
LVL 1

Author Comment

by:zozig
ID: 11861518
eternal_21,

Thanks for the quick response, this was exactly what I was looking for.

Zozgi
0

Featured Post

Netscaler Common Configuration How To guides

If you use NetScaler you will want to see these guides. The NetScaler How To Guides show administrators how to get NetScaler up and configured by providing instructions for common scenarios and some not so common ones.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Extention Methods in C# 3.0 by Ivo Stoykov C# 3.0 offers extension methods. They allow extending existing classes without changing the class's source code or relying on inheritance. These are static methods invoked as instance method. This…
Article by: Ivo
C# And Nullable Types Since 2.0 C# has Nullable(T) Generic Structure. The idea behind is to allow value type objects to have null values just like reference types have. This concerns scenarios where not all data sources have values (like a databa…
A short tutorial showing how to set up an email signature in Outlook on the Web (previously known as OWA). For free email signatures designs, visit https://www.mail-signatures.com/articles/signature-templates/?sts=6651 If you want to manage em…
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templa…

810 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