Exemplo n.º 1
0
        //使用流的方式读取和写入
        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;
                }
            }
        }
Exemplo n.º 2
0
        //分隔或切片
        //使用流的方式读取,然后一次性写入。
        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);
                }
            }
        }