Удалить часть байтов через 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);
            }
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы