文件分割代 FileInfo fInfo = new FileInfo("c:\\xx.rar");
int splitSize = 1024 * 400;
int splitCount = (int)fInfo.Length % splitSize==0 ? (int)fInfo.Length / splitSize : (int)fInfo.Length / splitSize + 1;
FileStream fileStream = new FileStream(fInfo.FullName,FileMode.Open,FileAccess.Read);
BinaryReader reader = new BinaryReader(fileStream);
for (int i = 0; i < splitCount; i++)
{
string tempName = "temp_" + i.ToString();
FileStream fs = new FileStream("c:\\tempfile" + tempName,FileMode.CreateNew,FileAccess.Write);
BinaryWriter tempWriter = new BinaryWriter(fs);
byte []tempData= reader.ReadBytes(splitSize);
if (tempData.Length == 0)
{
break;
}
tempWriter.Write(tempData, 0, tempData.Length);
tempWriter.Flush();
tempWriter.Close();
fs.Close();
}
reader.Close();
fileStream.Close(); 文件合并代码: DirectoryInfo dir = new DirectoryInfo("D:\\tempfile");
FileInfo[] fs = dir.GetFiles();
var sorts = from singlefile in fs
orderby singlefile.Name ascending
select singlefile; string fullname = "D:\\xx.rar"
FileStream fileStream = new FileStream(fullname,FileMode.CreateNew,FileAccess.Write);
BinaryWriter writer = new BinaryWriter(fileStream); foreach (FileInfo f in sorts)
{
FileStream tempStream = new FileStream(f.FullName, FileMode.Open, FileAccess.Read);
BinaryReader tempReader = new BinaryReader(tempStream);
byte[] data = tempReader.ReadBytes(1024 * 400);
writer.Write(data, 0, data.Length);
writer.Flush();
tempReader.Close();
tempStream.Close();
}
writer.Flush();
writer.Close();
fileStream.Close(); 对exe文件和其他类型文件都没问题 对压缩文件(rar)分割后合并 出现 不可预料的压缩文件末端不知道是什么原因?
int splitSize = 1024 * 400;
int splitCount = (int)fInfo.Length % splitSize==0 ? (int)fInfo.Length / splitSize : (int)fInfo.Length / splitSize + 1;
FileStream fileStream = new FileStream(fInfo.FullName,FileMode.Open,FileAccess.Read);
BinaryReader reader = new BinaryReader(fileStream);
for (int i = 0; i < splitCount; i++)
{
string tempName = "temp_" + i.ToString();
FileStream fs = new FileStream("c:\\tempfile" + tempName,FileMode.CreateNew,FileAccess.Write);
BinaryWriter tempWriter = new BinaryWriter(fs);
byte []tempData= reader.ReadBytes(splitSize);
if (tempData.Length == 0)
{
break;
}
tempWriter.Write(tempData, 0, tempData.Length);
tempWriter.Flush();
tempWriter.Close();
fs.Close();
}
reader.Close();
fileStream.Close(); 文件合并代码: DirectoryInfo dir = new DirectoryInfo("D:\\tempfile");
FileInfo[] fs = dir.GetFiles();
var sorts = from singlefile in fs
orderby singlefile.Name ascending
select singlefile; string fullname = "D:\\xx.rar"
FileStream fileStream = new FileStream(fullname,FileMode.CreateNew,FileAccess.Write);
BinaryWriter writer = new BinaryWriter(fileStream); foreach (FileInfo f in sorts)
{
FileStream tempStream = new FileStream(f.FullName, FileMode.Open, FileAccess.Read);
BinaryReader tempReader = new BinaryReader(tempStream);
byte[] data = tempReader.ReadBytes(1024 * 400);
writer.Write(data, 0, data.Length);
writer.Flush();
tempReader.Close();
tempStream.Close();
}
writer.Flush();
writer.Close();
fileStream.Close(); 对exe文件和其他类型文件都没问题 对压缩文件(rar)分割后合并 出现 不可预料的压缩文件末端不知道是什么原因?
说白了,不用看代码,你的逻辑存在问题,80%是多写东西了。
建议看看.RAR相关资料,问题解决了记得来分享下经验啊
分割合并
var sorts = from singlefile in fs
orderby singlefile.Name ascending
select singlefile;
排序有问题 使用了 orderby singlefile.CreateTime ascending后 一切正常了 跟踪了下 用 singlefile.Name temp_10.rar将会排在temp_2.rar前面 文件顺序被打乱 是造成出现问题的原因
另外 文件分割请使用二进制的BinaryWriter和BinaryReader进行操作 StreamWriter和StreamReader都会出错....