|
|
|
|
|
|
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]);
}
}
|
|
|
|