//使用流的方式读取和写入 private void slice2() { SlicesFilesNames.Clear(); FileInfo fileInfo = new FileInfo(SourceFilePath); string foler = fileInfo.DirectoryName; string fileName = fileInfo.Name; long sourceFileSize = fileInfo.Length; //long currentFileSize = 0; long bufferSize = 1024 * 1024; int fileIndex = 0; bool isLastSlice = false; while (true) { string sliceFilePath = Path.Combine(foler, fileName + "_" + fileIndex + "." + _sourceFileExtention); long startPosition = fileIndex * SliceFileSize; isLastSlice = (fileIndex + 1) * SliceFileSize >= sourceFileSize; readAndWriteOneSlice(sliceFilePath, bufferSize, startPosition, isLastSlice); fileIndex++; //currentFileSize += SliceFileSize; if (isLastSlice) { break; } } }
//分隔或切片 //使用流的方式读取,然后一次性写入。 private void slice() { SlicesFilesNames.Clear(); FileInfo fileInfo = new FileInfo(SourceFilePath); long fileSize = fileInfo.Length; //Debug.WriteLine(fileSize); //Debug.WriteLine(_sourceFileExtention); string foler = fileInfo.DirectoryName; string fileName = fileInfo.Name; //Debug.WriteLine(foler); using (FileStream fsRead = new FileStream(SourceFilePath, FileMode.Open, FileAccess.Read)) { int index = 1; while (true) { //byte[] buffer = new byte[SliceFileSize * 1024]; byte[] buffer = new byte[1024 * 1024]; int n = fsRead.Read(buffer, 0, buffer.Length); //Debug.WriteLine("n=" + n); if (n == 0) { break; } string outputFilePath = Path.Combine(foler, fileName + "_" + index + "." + _sourceFileExtention); SlicesFilesNames.Add(outputFilePath); //Debug.WriteLine("output file path=" + outputFilePath); File.WriteAllBytes(outputFilePath, buffer.Take(n).ToArray()); index++; //Debug.WriteLine("loop=" + end); } } }