computerpublic Ответов: 1

Хотите вручную ввести байты и сделать выходной файл


<pre>//The following piece of code takes an input file, read it, output binary to decimal conversion to the screen, and re-write the the file BYTE BYTE to another location.
//For this purpose, it works great. However I would like down this process into two (2) separate independent programs.

//I would like to create a separate program that takes a MANUAL INPUT of all BYTES READ (assume that i have them all written down on a piece of paper), one after the other, and re-create the file read to another location.
//This separate program will not read in ANYTHING. All it will do is take the manual input of bytes and re-write the file to another specified location.

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}, Count={2}", theByteInBinary, theByte, count);
                    }
                    output.Write(buffer, 0, bytesRead);
                }
            }
        }
    }
}



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

Я уже пробовал комментировать это:
using (Stream input = File.OpenRead(filePath))

Но я получаю ошибки в других местах, которые я не знаю, как исправить. Код компилируется и отлично работает, но теперь мне действительно нужен способ ввести байты вручную и разрешить:
output.Write(buffer, 0, bytesRead);
чтобы переделать файл.

1 Ответов

Рейтинг:
1

OriginalGriff

То, что Ваш репетитор нуждается в том, чтобы вы сделали, - это изменились от чтения из файла- вашего input Поток - для чтения данных непосредственно от пользователя.

Для этого вам нужно избавиться от линии:

using (Stream input = File.OpenRead(filePath))

И замените все ссылки в вашем коде на input со ссылками на Console класс и использовать различные методы чтения (Read и / или ReadLine) для извлечения байтов от пользователя.
Вам нужно будет решить, как пользователь вводит байты (он не может просто ввести их, так как он будет ограничен только символами, доступными с клавиатуры, в то время как значения байтов варьируются от 0 до 255), а затем решить, как вы сообщаете, что их больше нет, и так далее.

Сядьте и подумайте о задании, и о том, что вы узнали на последнем уроке - это должно быть довольно просто, если вы обратили внимание!


computerpublic

Все, что вы делаете, это говорите то, что я сказал, что я сделал. Я действительно прокомментировал "using (Stream input = File.OpenRead(filePath))", и это создало проблемы в других частях кода. Я сказал, что сделал это, когда впервые задал вопрос.

OriginalGriff

Да, и я сказал вам, что нужно сделать, чтобы заменить его.
Я не вижу вашего "измененного кода", поэтому я не могу комментировать "ошибку в других местах, которые я не знаю, как исправить", потому что я понятия не имею, что это за ошибки! :смеяться:

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

computerpublic

Please let me first say that I am here looking for help. Once i comment out "using (Stream input = File.OpenRead(filePath))", it nullifies other variables which are dependent to the line being commented out. So what I end up with, are other variables which also need to be commenting out and the problem snow ball in other problems. All I want to do is have someone show me how to redo the structure where i am still doing "output.Write(buffer, 0, bytesRead);", but taking the input manually one byte of a time (assume that i have them all the bytes written down on a piece of paper). I no longer want to do the "Read in from file" to get the bytes, but I want to build back the file from all the bytes entered. I am not a professional programmer like the people in this forum. I know my screen cannot be seen, but the entire code is here to be ran. It's only a few short line of code. I do not understand how to fix this problem. If you genuinely know how to fix this problem, please help me. Thank you.

OriginalGriff

Мы понимаем, что вы новичок - но вы должны понять, что для того, чтобы когда-либо быть больше, чем новичком, вам нужно сделать это самостоятельно. Наше "предоставление вам решения" никому не поможет в долгосрочной перспективе, так как вы ничего не узнаете о мыслительных процессах, связанных с передачей моего кода в качестве домашнего задания! И это означает, что следующая - более сложная - задача, которую он ставит, еще хуже для вас, потому что он ожидает, что вы будете иметь смутное представление о том, как думать, как разработчик, исходя из работы, которую вы должны были сделать над этой задачей.

Просто удаление линии само по себе не приносит ничего хорошего, конечно, это вызывает еще больше проблем! Это все равно что вынуть двигатель из машины - да, это значительно снижает вес, но не ускоряет его! Чтобы сделать это, вы должны поставить новый двигатель и справиться со всеми проблемами, которые возникают при подключении всего, чтобы он работал хорошо.

Так что перестань ныть и начинай думать:
1) Как я могу ввести один байт?
2) Как я могу хранить коллекцию одиночных байтов, чтобы иметь к ним доступ позже?
3) Как я сигнализирую "больше никаких байтов"?

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

computerpublic

OriginalGriff большое спасибо за вашу помощь. Может ли кто-нибудь на этом форуме помочь вам? Я не понимаю, что все, что я делаю, не работает. Я занимаюсь этим уже несколько недель. Я полностью хожу по кругу и очень смущен тем, как работает синтаксис. Это не из-за недостатка попыток. Я перепробовал так много разных способов добиться успеха и в итоге ничего не добился.

Я использую цикл с переменной "Totbyte" из исходной программы для управления циклом, который будет запускать и завершать процесс после точного количества введенных байтов. Я также хочу использовать "выход.Write(buffer, 0, bytesRead);" чтобы собрать обратно файл. У меня есть две(2) проблемы.

1. Как исправить обнуленные переменные, которые были закомментированы.
2. Как ввести новый байт относительно "output.Write(buffer, 0, bytesRead);"

johannesnestler

Может быть, еще раз перечитаешь совет Гриффа. Перестаньте возиться с кодом, который у вас есть сейчас. Просто подумайте о логических шагах, связанных с этим, не написав никакого кода. Также попробуйте посмотреть на программу с точки зрения пользователя - что бы вы ожидали (как пользователь), как вводить байты (не тривиальная проблема)... и так далее.
Затем попробуйте реализовать его с тем, что вы знаете. Но такие вопросы, как "Как исправить обнуленные переменные, которые были прокомментированы", показывают, насколько далеко вы продвинулись в понимании программирования - так что того, что вы знаете сейчас, возможно, недостаточно. По крайней мере, попытайся понять то, чего ты не понимаешь. ;) Я думаю, что вам придется снова открыть свою книгу по программированию и изучить основы, прежде чем идти дальше... извините, но я думаю, что на вашем нынешнем "уровне понимания" даже некоторые примеры кода вам не помогут...

computerpublic

Я все еще ищу помощи, если кто-нибудь будет достаточно добр, чтобы помочь. Заранее спасибо.

OriginalGriff

Ну, у тебя было пять дней, чтобы поработать над этим сейчас - ты должен был бы уже сделать хороший кусок сам. Что тебе еще остается делать?