標籤:
工作中遇到要上傳下載的功能,而中間接收的伺服器最大隻能接收200M的檔案,對於大檔案無法滿足,所以只能在上傳的時候對大於100M的檔案進行分割,分割成的小檔案為原大檔案名稱+.temp+i。在下載端,下載完成後再對其進行合并。
思路:檔案的分割與合并就是將檔案先轉換成流再對其進行操作。
/// <summary>
/// 分割檔案方法
/// </summary>
/// <param name="filePath">被分割檔案</param>
/// <param name="cutFileSize">被分割檔案大小</param>
/// <returns>分割後的檔案</returns>
string[] CutFile(string filePath,int cutFileSize)
{
string[] result;
//檔案流讀取檔案
using (FileStream cutFileStream = new FileStream(filePath, FileMode.Open))
{
//二進位讀取器
using (BinaryReader cutFileReader = new BinaryReader(cutFileStream))
{
byte[] cutBytes;
//分割的檔案個數
int fileCount =Convert.ToInt32(Math.Ceiling((double)cutFileStream.Length / cutFileSize));
result = new string[fileCount];
for (int i = 0; i < fileCount; i++)
{
//分割檔案儲存路徑
string saveFilePath=Application.StartupPath+"\\cutfile\\";
//分割檔案名稱
string cutFileName = Path.Combine(saveFilePath, Path.GetFileName(filePath)) + ".temp" + i;
result[i] = cutFileName;
//分割檔案流
using (FileStream tempStream = new FileStream(cutFileName, FileMode.OpenOrCreate))
{
//分割檔案二進位寫入器
using (BinaryWriter tempWriter = new BinaryWriter(tempStream))
{
cutBytes = cutFileReader.ReadBytes(cutFileSize);
tempWriter.Write(cutBytes);
}
}
}
}
}
return result;
}
/// <summary>
/// 合并檔案
/// </summary>
/// <param name="filePaths">要合并的檔案清單</param>
/// <param name="combineFile">合并後的檔案路徑帶檔案名稱</param>
void CombineFiles(string[] filePaths,string combineFile)
{
using (FileStream CombineStream = new FileStream(combineFile, FileMode.OpenOrCreate))
{
using (BinaryWriter CombineWriter = new BinaryWriter(CombineStream))
{
foreach (string file in filePaths)
{
using (FileStream fileStream = new FileStream(file, FileMode.Open))
{
using (BinaryReader fileReader = new BinaryReader(fileStream))
{
byte[] TempBytes = fileReader.ReadBytes((int)fileStream.Length);
CombineWriter.Write(TempBytes);
}
}
}
}
}
}
上傳下載有很多現成的類方法可以調用如WebClient或者通過http協議的HttpWebRequest,HttpWebResponse等都可實現。
c# 檔案分割與合并