Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

Truncate and Append file in C#

Posted on 2004-08-20
6
Medium Priority
?
8,242 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
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 2000 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

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

Question has a verified solution.

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

Introduction Although it is an old technology, serial ports are still being used by many hardware manufacturers. If you develop applications in C#, Microsoft .NET framework has SerialPort class to communicate with the serial ports.  I needed to…
This article is for Object-Oriented Programming (OOP) beginners. An Interface contains declarations of events, indexers, methods and/or properties. Any class which implements the Interface should provide the concrete implementation for each Inter…
This tutorial will teach you the special effect of super speed similar to the fictional character Wally West aka "The Flash" After Shake : http://www.videocopilot.net/presets/after_shake/ All lightning effects with instructions : http://www.mediaf…
How to fix incompatible JVM issue while installing Eclipse While installing Eclipse in windows, got one error like above and unable to proceed with the installation. This video describes how to successfully install Eclipse. How to solve incompa…
Suggested Courses

618 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