Удалить часть байтов через Stream - C#
Формулировка задачи:
Как можно удалить часть байтов через Stream (или т.п.), что бы не нагружать оперативную память?
Решение задачи: «Удалить часть байтов через Stream»
textual
Листинг программы
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace TestStream { class Program { static void Main(string[] args) { Console.WriteLine("Результат проекта:"); Console.WriteLine(); _removeBytesInFileStream("D:\\Test.mp3", 0, 1024*1024); Console.WriteLine(); Console.WriteLine("Чтобы продолжить, нажмите на любую клавишу..."); Console.ReadKey(); } public static void _removeBytesInFileStream(string sourceFile, long start, long length) { string tempFileSource = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); try { using (FileStream ReadFileStream = new FileStream(sourceFile,FileMode.Open,FileAccess.Read)) { Console.WriteLine("[{0}] Файл {1} был удачно открыт." ,DateTime.Now.ToLongTimeString(), Path.GetFileName(sourceFile)); using(FileStream WriteFileStream = new FileStream(tempFileSource,FileMode.Create,FileAccess.Write)) { Console.WriteLine("[{0}] Файл {1} был удачно создан.", DateTime.Now.ToLongTimeString(), Path.GetFileName(tempFileSource)); if (start == 0) { Console.WriteLine("[{0}] Удаление массива по левой части FileStream.", DateTime.Now.ToLongTimeString()); byte[] buffer = new byte[16]; int lengthBytesEnd = 0; ReadFileStream.Position = length; do { lengthBytesEnd = ReadFileStream.Read(buffer,0,buffer.Length); WriteFileStream.Write(buffer, 0, lengthBytesEnd); } while (lengthBytesEnd != 0); } else if (start == ReadFileStream.Length - length) { Console.WriteLine("[{0}] Удаление массива по правой части FileStream.", DateTime.Now.ToLongTimeString()); byte[] buffer = new byte[16]; int lengthBytesEnd = 0; do { lengthBytesEnd = ReadFileStream.Read(buffer, 0, buffer.Length); WriteFileStream.Write(buffer, 0, lengthBytesEnd); } while (lengthBytesEnd != 0 & ReadFileStream.Position <= start); WriteFileStream.SetLength(start); } else { Console.WriteLine("[{0}] Удаление массива по центральной части FileStream.", DateTime.Now.ToLongTimeString()); byte[] buffer = new byte[16]; int lengthBytesEnd = 0; do { lengthBytesEnd = ReadFileStream.Read(buffer, 0, buffer.Length); WriteFileStream.Write(buffer, 0, lengthBytesEnd); } while (lengthBytesEnd != 0 & ReadFileStream.Position <= start); WriteFileStream.SetLength(start); ReadFileStream.Position = start + length; do { lengthBytesEnd = ReadFileStream.Read(buffer, 0, buffer.Length); WriteFileStream.Write(buffer, 0, lengthBytesEnd); } while (lengthBytesEnd != 0); } } } File.Delete(sourceFile); Console.WriteLine("[{0}] Файл {1} был удачно удалён.", DateTime.Now.ToLongTimeString(), Path.GetFileName(sourceFile)); File.Move(tempFileSource, sourceFile); Console.WriteLine("[{0}] Файл {1} был удачно перемещён.", DateTime.Now.ToLongTimeString(), Path.GetFileName(tempFileSource)); } catch (Exception ex) { Console.WriteLine(ex); } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д