.NET 3.x Переопределить операции >> и << записи и чтения в/из файл/а - C#

Узнай цену своей работы

Формулировка задачи:

Класс должен предоставлять возможность работы с файловыми потоками, в том числе, необходимо переопределить операции >> и << записи и чтения в/из файл/а. Объем записки - 20-25 стр. 14, полуторный интервал без листинг. Листинг - в приложении к КР.
Вот мой код.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
 
namespace fileclass
{
    public class fileclass
    {
        private string fname;
 
        public fileclass(string fn)
        {
            fname = fn;
        }
 
        public fileclass()
        {
            Console.Write("Введите имя файла (вместе с расширением): ");
            fname = Console.ReadLine();
        }
 
        ~fileclass()
        {
            // магия деструктора
        }
 
        public string FName()
        {
            return fname;
        }
 
        public void Create()
        {
            FileStream file = new FileStream(fname, FileMode.Create);
            Console.WriteLine("Создан файл с именем \"" + fname + "\".");
            file.Close();
        }
 
        public void AddData()
        {
            FileStream file = new FileStream(fname, FileMode.Append);
            StreamWriter filestr = new StreamWriter(file);
            Console.Write("Введите данные: ");
            string tmp = Console.ReadLine();
            filestr.WriteLine(tmp);
            Console.WriteLine("Готово! Данные добавлены в конец файла.");
            filestr.Close();
            file.Close();
        }
 
        public void AddData(string n)
        {
            FileStream file = new FileStream(fname, FileMode.Append);
            StreamWriter filestr = new StreamWriter(file);
            Console.Write("Ввод данных.");
            filestr.WriteLine(n);
            Console.WriteLine("Готово! Данные добавлены в конец файла.");
            filestr.Close();
            file.Close();
        }
 
        public void ReadData()
        {
            Console.WriteLine("Функции чтения не передан ни один параметр.");
            Console.WriteLine("Файл будет показан полностью.");
            FileStream file = new FileStream(fname, FileMode.Open, FileAccess.Read);
            // передаем символьному потоку ввода
            // в качестве аргумента байтовый поток
            StreamReader filestr_in = new StreamReader(file);
            string line;
            while (!filestr_in.EndOfStream)
            {
                // выводим строки, пока не достигнем конца файла
                // filestr_in.EndOfStream возвращает true, если
                // достигнут конец файла
                line = filestr_in.ReadLine();
                Console.WriteLine(line);
            }
            // закрываем потоки
            filestr_in.Close();
            file.Close();
        }
 
        public void ReadData(int n)
        {
            FileStream file = new FileStream(fname, FileMode.Open, FileAccess.Read);
            // передаем символьному потоку ввода
            // в качестве аргумента байтовый поток
            StreamReader filestr_in = new StreamReader(file);
            string line;
            int count = 0;
            while (!filestr_in.EndOfStream)
            {
                // выводим строки, пока не достигнем конца файла
                // filestr_in.EndOfStream возвращает true, если
                // достигнут конец файла
                line = filestr_in.ReadLine();
                count++;
            }
            file.Seek(0, SeekOrigin.Begin);
            Console.WriteLine("В файле " + count + " строк.");
            if (n > count)
            {
                Console.WriteLine("Запрос превышает количество строк в файле.");
                return;
            }
            Console.WriteLine("Будет показано " + n + " строк файла.");
            for (int i = 0; i < n; i++)
            {
                // выводим строки, пока не достигнем конца файла
                // filestr_in.EndOfStream возвращает true, если
                // достигнут конец файла
                line = filestr_in.ReadLine();
                Console.WriteLine(line);
            }
            // закрываем потоки
            filestr_in.Close();
            file.Close();
        }
 
        public void CopyFrom(string _fname)
        {
            Console.WriteLine("Копирование из " + _fname + " в " + fname + ".");
            FileStream file = new FileStream(fname, FileMode.Append, FileAccess.Write);
            StreamWriter filestr = new StreamWriter(file);
            FileStream _file = new FileStream(_fname, FileMode.Open, FileAccess.ReadWrite);
            StreamReader _filestr = new StreamReader(_file);
            string line;
            while (!_filestr.EndOfStream)
            {
                // выводим строки, пока не достигнем конца файла
                // filestr_in.EndOfStream возвращает true, если
                // достигнут конец файла
                line = _filestr.ReadLine();
                filestr.WriteLine(line);
            }
            Console.WriteLine("Готово.");
            _filestr.Close();
            filestr.Close();
            _file.Close();
            file.Close();
        }
 
        public void CopyIn(string _fname)
        {
            Console.WriteLine("Копирование из " + fname + " в " + _fname + ".");
            FileStream file = new FileStream(fname, FileMode.Open, FileAccess.ReadWrite);
            StreamReader filestr = new StreamReader(file);
            FileStream _file = new FileStream(_fname, FileMode.Append, FileAccess.Write);
            StreamWriter _filestr = new StreamWriter(_file);
            string line;
            while (!filestr.EndOfStream)
            {
                // выводим строки, пока не достигнем конца файла
                // filestr_in.EndOfStream возвращает true, если
                // достигнут конец файла
                line = filestr.ReadLine();
                _filestr.WriteLine(line);
            }
            Console.WriteLine("Готово.");
            _filestr.Close();
            filestr.Close();
            _file.Close();
            file.Close();
        }
 
        public static void operator >>(fileclass fc1, fileclass fc2) // перегрузка оператора ">>"
        {
            fc1.CopyIn(fc2.FName());
        }
 
        public static void operator <<(fileclass fc1, fileclass fc2) // перегрузка оператора "<<"
        {
            fc1.CopyFrom(fc2.FName());
        }
    }
}
Не могу сообразить как перегрузить эти операторы. Может кто подсказать, как лучше это сделать?

Решение задачи: «.NET 3.x Переопределить операции >> и << записи и чтения в/из файл/а»

textual
Листинг программы
fc1 >> "test.txt";
//В качестве оператора могут использоваться только выражения присваивания, вызова, инкремента, декремента и создания нового объекта

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


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

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

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