Для чтения/записи файлов в C# можно использовать несколько подходов в зависимости от задачи. Например, если нужно вывести весь текст из файла в консоль - можно использовать File.ReadAllText(). Если же нужно форматировать каждую строку файла или, например, необходимо считывать текст файла по одному символу - можно использовать StreamReader. Разумеется, считывать с файла можно не только сплошной текст. Это могут быть байты, отдельные строки; опять же в зависимости от задачи. Аналогичная ситуация с записью в файл. Для записи используем File.WriteAllBytes() или StreamWriter. Классы File, StreamReader, StreamWriter и др. находятся в пространстве имен System.IO. Обязательно напишите строку кода: using System.IO; или обращайтесь к классу так: System.IO.File.ReadAllLines(); Также хочу сразу предотвратить возможную ошибку: если вы открываете файл для записи/чтения, не забудьте освободить ресурсы. Иначе файл так и останется открытым, и если к нему еще раз обратиться, то будет ошибка. Для этого закрывайте файл или освобождайте ресурсы вручную: File.Create().Close(); или reader.Dispose(); Но есть возможность делать это автоматически. Для этого нужно использовать using как в моем коде.
Для наглядности привожу пример программы. Задача: считать из файла имена людей и записать в другой файл отсортированный список. Затем взять сообщение из файла, закодировать, поместить закодированное сообщение в файл. Получить из файла закодированное сообщение, расшифровать и вывести в консоль. Для решения использовал основные приемы для чтения/записи файла. Также сделал краткие комментарии. Надеюсь, всё было понятно. Поскольку в ответе код скорее всего отформатируется криво, прикрепил фотографию с "красивым" кодом, а также фотографию входных и выходных файлов.
Код:
using System;
using System.IO;
using System.Text;
using System.Collections.Generic;
namespace ConsoleApp1
{
internal class Program
{
private static void Main(string[] args)
{
//Путь к входным и выходным файлам.
const string inputPath1 = @"D:\ProgramsTester\Input1.txt";
const string inputPath2 = @"D:\ProgramsTester\Input2.txt";
const string outputPath1 = @"D:\ProgramsTester\Output1.txt";
const string outputPath2 = @"D:\ProgramsTester\Output2.txt";
//Список.
List<string> items = new List<string>();
//Использует StreamReader, а затем высвобождает ресурсы.
using (StreamReader reader = new StreamReader(inputPath1))
{
//Читает весь файл.
while (!reader.EndOfStream)
{
items.Add(reader.ReadLine());
}
}
//Сортировка массива.
items.Sort();
//Использует StreamWriter, а затем высвобождает ресурсы.
using (StreamWriter writer = new StreamWriter(outputPath1))
{
//Записывает отсортированный список в файл.
for (int i = 0; i < items.Count; i++)
{
writer.WriteLine(items[i]);
}
}
//Байты из файла, хранящего сообщение, записываются в массив байт.
byte[] fileBytes = File.ReadAllBytes(inputPath2);
//Запись закодированного сообщения в файл.
File.WriteAllText(outputPath2, Convert.ToBase64String(fileBytes));
//Вывод декодированного сообщения, полученного из файла.
Console.WriteLine("Decoded text: " + Encoding.Default.GetString(Convert.FromBase64String(File.ReadAllText(outputPath2))));
_ = Console.ReadKey();
}
}
}
Объяснение:
1) 75(10) = 64 + 11 = 64 + 8 + 2 + 1 = 1*2^6 + 0*2^5 + 0*2^4 + 1*2^3 + 0*2^2 + 1*2^1 + 1*2^0 = 1001011(2) = 1.001.011 = 113(8)
Чтобы перевести из двоичной системы в восьмеричную, нужно разбить число на тройки, начиная справа, а потом перевести каждую тройку в восьмеричное число по таблице:
000 = 0; 001 = 1; 010 = 2; 011 = 3; 100 = 4; 101 = 5; 110 = 6; 111 = 7.
2) 0,3(10) = 0,25 + 0,05 = 2/8 + 5/100 = 2/8 + 3/64 + 1/512 + 0,00117 ≈ 2*8^(-1) + 3*8^(-2) + 1*8^(-3) = 0,231(8)
3) Обозначим основание системы х. Тогда
2x + 1 + 2x + 4 = x^2
x^2 - 4x - 5 = 0
(x - 5)(x + 1) = 0
Очевидно, x = 5, потому что x = -1 < 0 не подходит.
ответ: В пятеричной системе.
6) Обозначим основание системы х. Тогда
3x + 3 = 51
3x = 51 - 3 = 48
x = 48/3 = 16
ответ: В 16-ричной системе.
7) Обозначим основание системы х. Тогда
2x + 5 + 3x + 4 = x^2 + 3
x^2 - 5x - 6 = 0
(x - 6)(x + 1) = 0
Очевидно, x = 6, потому что x = -1 < 0 не подходит.
ответ: в шестиричной системе.