01.Blogs :
CCTING  

split and join Files

public class FilePartitionManager

{

private FilePartitionManager()

{

}

private static string GetFolder(string FileName)

{

System.IO.FileInfo info = new FileInfo(FileName);

return info.DirectoryName;

}

public static void WritePartition(int PartitionLength, string ReadFileName, string WriteFileName)

{

FileStream reader = new FileStream(ReadFileName, FileMode.Open, FileAccess.Read);

byte[] readBytes = new byte[PartitionLength];

string directory = GetFolder(WriteFileName);

int iTotalPartition = CountPartition(reader.Length, PartitionLength);

if (!System.IO.Directory.Exists(directory))

System.IO.Directory.CreateDirectory(directory);

for (int i = 0; i < iTotalPartition; i++)

{

string FileName = WriteFileName + "." + i.ToString() + "." + iTotalPartition.ToString();

FileStream writer = new FileStream(FileName, FileMode.Create, FileAccess.Write);

readBytes.Initialize();

int iRead = reader.Read(readBytes, 0, PartitionLength);

writer.Write(readBytes, 0, iRead);

writer.Close();

}

reader.Close();

GC.Collect();

}

public static void JoinPartition(string OneOfPartitionFileName)

{

string WriteFileName = GetOrginalFileName(OneOfPartitionFileName);

int iTotalPartition = CountPartition(OneOfPartitionFileName);

FileStream writer = new FileStream(WriteFileName, FileMode.Create, FileAccess.Write);

for (int i = 0; i < iTotalPartition; i++)

{

string PartitionFileName = string.Format("{0}.{1}.{2}", WriteFileName, i, iTotalPartition);

FileStream reader = new FileStream(PartitionFileName, FileMode.Open, FileAccess.Read);

byte[] readBytes = new byte[reader.Length];

readBytes.Initialize();

int iRead = reader.Read(readBytes, 0, readBytes.Length);

writer.Write(readBytes, 0, iRead);

reader.Close();

}

writer.Close();

GC.Collect();

}

public static void JoinDeletePartition(string OneOfPartitionFileName)

{

string WriteFileName = GetOrginalFileName(OneOfPartitionFileName);

int iTotalPartition = CountPartition(OneOfPartitionFileName);

FileStream writer = new FileStream(WriteFileName, FileMode.Create, FileAccess.Write);

for (int i = 0; i < iTotalPartition; i++)

{

string PartitionFileName = string.Format("{0}.{1}.{2}", WriteFileName, i, iTotalPartition);

FileStream reader = new FileStream(PartitionFileName, FileMode.Open, FileAccess.Read);

byte[] readBytes = new byte[reader.Length];

readBytes.Initialize();

int iRead = reader.Read(readBytes, 0, readBytes.Length);

writer.Write(readBytes, 0, iRead);

reader.Close();

System.IO.File.Delete(PartitionFileName);

GC.Collect();

}

writer.Close();

GC.Collect();

}

 

private static string GetOrginalFileName(string OneOfPartitionFileName)

{

int iPartition = CountPartition(OneOfPartitionFileName);

string []names = OneOfPartitionFileName.Split('.');

int namesLength = names.Length;

string originalName = "";

for (int i = 0; i < namesLength - 2; i++)

originalName += names[i]+".";

originalName = originalName.Substring(0, originalName.Length - 1);

return originalName;

}

private static int CountPartition(long iTotalLength, int PartitionLength)

{

double aa = (double)iTotalLength;

double bb = (double)PartitionLength;

double cc = aa / bb;

int c = (int)cc;

double result = cc - c;

if (result > 0)

return (c + 1);

return c;

}

private static int CountPartition(string PartitionFileName)

{

string[] names = PartitionFileName.Split('.');

bool bValid = true;

foreach (char c in names[names.Length - 1])

if (!char.IsDigit(c))

bValid = false;

if (!bValid)

{

System.Windows.Forms.MessageBox.Show(PartitionFileName + " is not a valid partition file");

return 0;

}

return Convert.ToInt32( names[names.Length - 1]);

}

 

}

posted on Tuesday, June 07, 2005 5:59 AM by CCTING


 
03.UPDATE CALENDAR :
<June 2005>
SunMonTueWedThuFriSat
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

05.MY LINKS :

07.Subscriptions :

Subscriptions


© Copyright 2005 Microsoft Corporation. All Rights Reserved.
Terms of Use | Privacy Statement | Code of Conduct | Hosted by MaximumASP for Microsoft
WHO-BAR