Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 8326
  • Last Modified:

Truncate and Append file in C#

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
zozig
Asked:
zozig
  • 5
1 Solution
 
eternal_21Commented:
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
 
eternal_21Commented:
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
 
eternal_21Commented:
2. Read your 511K segment into another buffer (called appendBuffer), and then finally:
0
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

 
eternal_21Commented:
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
 
eternal_21Commented:
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
 
zozigAuthor Commented:
eternal_21,

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

Zozgi
0

Featured Post

[Webinar] Cloud and Mobile-First Strategy

Maybe you’ve fully adopted the cloud since the beginning. Or maybe you started with on-prem resources but are pursuing a “cloud and mobile first” strategy. Getting to that end state has its challenges. Discover how to build out a 100% cloud and mobile IT strategy in this webinar.

  • 5
Tackle projects and never again get stuck behind a technical roadblock.
Join Now