.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"; //В качестве оператора могут использоваться только выражения присваивания, вызова, инкремента, декремента и создания нового объекта