computerpublic Ответов: 1

Попытка сделать LIFO file IO на очень большом файле


ДОБРЫЙ ВЕЧЕР
Я хочу прочитать очень большой файл в один террабайт, используя метод LIFO (last in first out).
Текущий код использует метод FIFO.
Как можно изменить этот код, чтобы сделать LIFO для очень больших террабайтных файлов?
СПАСИБО

Что я уже пробовал:

using System;
using System.IO;
using System.Collections;

namespace Applica
{
    static class Program
    {
        static void Main(string[] args)
        {
            DirectoryInfo da = new DirectoryInfo("C:\\Fol");
            if (!da.Exists)
            {
                Console.WriteLine("The folder '{0}' does not exist.", da.FullName);
                return;
            }
            FileInfo[] Arr = da.GetFiles();
            if (Arr.Length == 0)
            {
                Console.WriteLine("There are no files in the folder '{0}'.", da.FullName);
                return;
            }
            FileInfo ap = Arr[Arr.Length - 1];
            long Totbyte = ap.Length;
            string filePath = ap.FullName;
            Console.WriteLine("Total Bytes = {0} bytes", Totbyte);

            const int BufferSize = 1024;
            byte[] buffer = new byte[BufferSize];

            string destinationPath = Path.Combine("C:\\check", Path.GetFileName(filePath));

            using (Stream input = File.OpenRead(filePath))
            using (Stream output = File.OpenWrite(destinationPath))
            {
                int bytesRead;
                while ((bytesRead = input.Read(buffer, 0, BufferSize)) > 0)
                {
                    for (int count = 0; count < bytesRead; count++)
                    {
                        byte theByte = buffer[count];
                        string theByteInBinary = Convert.ToString(theByte, 2).PadLeft(8, '0');
                        Console.WriteLine("{0} = {1}", theByteInBinary, theByte);
                    }
                    output.Write(buffer, 0, bytesRead);
                }
            }
        }
    }
}

[no name]

Вы добираетесь до конца файла и читаете в обратном порядке.

Jon McKee

Жаль,что я не могу высказать свое мнение. Это именно то решение.

Patrice T

Каков размер данных ? Байты? слова? Линии.

1 Ответов

Рейтинг:
1

Dave Kreskowiak

Вы ищете последний байт в файле и читаете этот байт. Теперь указатель файла находится после этого байта. Чтобы прочитать следующий байт (перед байтом, который вы только что прочитали), вы должны найти два байта назад и прочитать один байт снова. Делайте это до тех пор, пока вы не закончите или не попытаетесь найти -1.

Внимание! Это очень неэффективный метод чтения файла и, скорее всего, займет целую вечность на файле размером 1 ТБ.

Лучшим методом было бы считывание блоков байтов в память и обработка байтов в этих блоках, байт за байтом или как вам это нужно.