1. Чтение и запись файлов
Идеи: В основном используются метод CreateText класса File и метод WriteLine класса StreamWriter.
(1) Метод CreateText класса File, который создает или открывает файл для записи текста в кодировке UTF-8. Синтаксис следующий: public static StreamWriter(string path)
(2), метод WriteLine класса StreamWriter
Этот метод реализует запись в файловый поток строки, за которой следует признак конца строки.Синтаксис следующий:
public virtual void WriteLine(string value)
Описание параметра: значение: записываемая строка, если значение равно нулю, записывается только символ конца строки.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
textBox1.Text = saveFileDialog1.FileName;
}
else
{
textBox1.Text = "";
}
}
private void button2_Click(object sender, EventArgs e)
{
If (String.IsNullOrEmpty(textBox1.Text.Trim()))//Если путь к файлу пуст
{
MessageBox.Show("Укажите путь к файлу!");
return;
}
If (String.IsNullOrEmpty(textBox2.Text.Trim()))//Если текстовое содержимое пусто
{
MessageBox.Show("Пожалуйста, введите содержимое файла!");
return;
}
if (!File.Exists(textBox1.Text))
{//Создайте или откройте файл для записи текста в кодировке UTF-8.
using (StreamWriter sw = File.CreateText(textBox1.Text)) {
sw.WriteLine(textBox2.Text);//Записываем строку в текстовый поток
MessageBox.Show("Файл успешно создан", "Подсказка", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
else
{
MessageBox.Show("Файл уже существует", "Подсказка", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
2. Метод OpenRead открывает существующий файл и читает его
Идеи: В основном используются метод OpenRead класса File и метод Read класса FileStream.
(1) Метод OpenRead класса File, реализующий открытие существующего файла для чтения, формат синтаксиса следующий:
public static FileStream OpenRead(string path)
Описание параметра: путь: файл, который нужно открыть для чтения.
Возвращаемое значение: Файловый поток только для чтения по указанному пути.
(2), метод Read класса FileStream
Этот метод реализует быстрое чтение байтов из потока и запись данных в заданный буфер Синтаксис следующий:
public override int Read(byte[] array,int offset,int count)
Описание параметра в методе Read:
параметр | инструкция |
---|---|
Array | буфер для записи данных |
Offset | индекс начальной позиции для чтения |
Count | Максимальное количество прочитанных байтов |
возвращаемое значение | Общее количество байтов, считанных в буфер. Общее количество байтов может быть меньше запрошенного количества байтов, если текущее количество байтов меньше запрошенного, или равно нулю, если достигнут конец потока. |
пример:
private void button1_Click(object sender, EventArgs e)
{
try
{
openFileDialog1.Filter = "Текстовый файл(*.txt)|*.txt";//Устанавливаем тип открываемого файла
openFileDialog1.ShowDialog();
TextBox1.Text = openFileDialog1.FileName;//Задаем имя открытого файла
FileStream fs = File.OpenRead(textBox1.Text);//Открыть существующий файл для чтения
Byte[] b = new byte[1024];//Определяем кеш
Пока (fs.Read(b, 0, b.Length) > 0)//Цикл каждый раз считывает в буфер 1024 байта
{//Преобразовать все байты массива байтов в строку
textBox2.Text = Encoding.Default.GetString(b);
}
}
catch { MessageBox.Show("Пожалуйста, выберите файл"); }
}
3. Используйте метод OpenWrite, чтобы открыть существующий файл и записать в него
Идея состоит в том, чтобы использовать метод OpenWrite класса File, метод GetBytes абстрактного класса Encoding и метод Write класса FileStream.
- Метод OpenWrite класса File
Этот метод используется для открытия существующего файла для записи, синтаксис следующий:
Public static FileStream OpenWrite(string path)
Описание параметра: путь: файл, который нужно открыть для специальной записи.
Возвращаемое значение: возвращает динамический объект общего файлового потока по указанному пути с разрешением на запись.
- Метод GetBytes абстрактного класса Encoding. Этот метод используется для реализации кодирования всех символов в указанной строке в последовательность байтов. Синтаксис следующий: общедоступный виртуальный байт[] GetBytes(string s)
Описание параметра: s: строка, содержащая символы для кодирования.
Возвращаемое значение: возвращает массив байтов, содержащий результат кодирования указанного набора символов.
- Напишите метод класса FileStream. Реализация метода записывает блок байтов в поток, используя данные, считанные из буфера. Синтаксис следующий: public override void Write(byte[] array,int offset,int count)
Описание параметра в методе Write:
параметр | инструкция |
---|---|
Array | буфер, содержащий данные для записи в этот поток |
Offset | Индекс позиции, с которой начинать копирование байтов в текущий поток |
Count | Максимальное количество байтов для записи в текущий поток. |
возвращаемое значение | нет возвращаемого значения |
пример:
public partial class Form1 : Form {
public Form1()
{ InitializeComponent();}
private void button1_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = "Текстовый файл (*.txt)|*.txt";
openFileDialog1.ShowDialog();
textBox1.Text = openFileDialog1.FileName;
}
private void button2_Click(object sender, EventArgs e)
{
if (String.IsNullOrEmpty(textBox1.Text.Trim()))
{
MessageBox.Show("Пожалуйста, установите файл!");
return;
}
try
{
FileStream FStream = File.OpenWrite(textBox1.Text);
Byte[] info = Encoding.Default.GetBytes(textBox2.Text);
FStream.Write(info, 0, info.Length);
FStream.Close();
MessageBox.Show("Файл успешно записан!");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
3. Откройте существующий текстовый файл в кодировке UTF-8 и прочитайте его.
Идея: в основном использовать метод OpenText класса File и метод ReadToEnd класса StreamReader,
- Метод OpenText класса File, реализующий открытие существующего текстового файла в кодировке UTF-8 для чтения. Синтаксис следующий: public static StreamReader OpenText(string path)
(2) ReadToEnd() класса StreamReader. Описание параметра: Возвращаемое значение: Возвращает остальную часть потока в виде строки (от текущей позиции до конца). Возвращает пустую строку (""), если текущая позиция находится в конце потока.
пример:
private void button1_Click(object sender, EventArgs e)
{
try
{
openFileDialog1.Filter = "Текстовый файл (*.txt)|*.txt";
openFileDialog1.ShowDialog();
textBox1.Text = openFileDialog1.FileName;
StreamReader SReader = File.OpenText(textBox1.Text);
textBox2.Text = SReader.ReadToEnd();
}
catch { }
}
4. Прочитайте первую строку данных в файле
Используемый основной метод: ReadLine();
openFileDialog1.Filter = "Текстовый файл (*.txt)|*.txt";
openFileDialog1.ShowDialog();
textBox1.Text = openFileDialog1.FileName;
StreamReader SReader = new StreamReader(textBox1.Text, Encoding.Default);
textBox2.Text = SReader.ReadLine();
5. Преобразование текстовых файлов в веб-файлы
Идеи: В основном используйте метод AppendText и метод SaveFile элемента управления RichTextBox.
(1) Метод AppendText элемента управления RichTextBox, реализующий добавление текста к текущему тексту текстового поля в следующем формате:
Public void AppendText(string text)
- Метод SaveFile, реализующий сохранение содержимого RichTextBox в файл определенного класса Cining Palace, имеет следующий синтаксис: public void Save File(string path,RichTextBoxStreamType fileType)
FileType: одно из перечислений RichTextBoxStreamType,
значение перечисления | инструкция |
---|---|
RichText | Поток в формате RTF |
PlainText | Обычный текстовый поток для объектов объединения и внедрения (OLE) объектов с пробелами вместо этого |
RichNoOleObjs | Замена пробелов для потоков OLE-объектов в формате RTF. |
TextTextOleObjs | Обычный текстовый поток с текстовым представлением объекта OLE. |
UnicodePlainText | Текстовый поток, содержащий пробелы вместо объектов связывания и внедрения объектов (OLE) |
пример:
string strContent = "##Technology Co., Ltd. является высокотехнологичным предприятием, ядром которого является технология компьютерного программного обеспечения. Оно включает в себя производство, управление, контроль, складирование, логистику, маркетинг, сервис и т. д. В компании работают старшие специалисты и ориентированные на обучение технические команды в области разработки программного обеспечения и реализации проектов, и за эти годы накопили обширную техническую документацию и учебные материалы. Не только новаторский и предприимчивый технический практик, но и стремящийся стать популяризатором и распространителем технологий.";
String strCompany = "## Technology Co., Ltd.";
string strWeb = "www.##soft.com";
String strFileName = "Веб-страница компании.htm";
richTextBox1.Clear();
richTextBox1.AppendText("<HTML>");
richTextBox1.AppendText("<HEAD>");
richTextBox1.AppendText("<TITLE>");
richTextBox1.AppendText(strCompany);
richTextBox1.AppendText("</TITLE>");
richTextBox1.AppendText("</HEAD>");
richTextBox1.AppendText("<BODY BGCOLOR='TAN'>");
richTextBox1.AppendText("<CENTER>");
richTextBox1.AppendText("<H2>" + strCompany + "</H2>");
String strHyper = "
Добро пожаловать на сайт **технологической компании:";
richTextBox1.AppendText(strHyper + strWeb + "</A></H4>");
richTextBox1.AppendText("</CENTER>");
richTextBox1.AppendText(strContent);
richTextBox1.AppendText("</BODY>");
richTextBox1.AppendText("</HTML>");
richTextBox1.SaveFile(strFileName, RichTextBoxStreamType.PlainText);
System.Diagnostics.Process.Start(strFileName);
6. Чтение и запись данных потока памяти
В основном используйте свойство Capacity класса MemoryStream, метод Write и метод Read.
пример:
private void button1_Click(object sender, EventArgs e)
{
byte[] BContent = Encoding.Default.GetBytes(textBox1.Text);
MemoryStream MStream = new MemoryStream(100);
MStream.Write(BContent, 0, BContent.Length);
RichTextBox1.Text = "Количество байтов, выделенных для этого потока:" + MStream.Capacity.ToString() + "\nДлина потока:"
+ MStream.Length.ToString() + "\nТекущая позиция потока: " + MStream.Position.ToString();
MStream.Seek(0, SeekOrigin.Begin);
byte[] byteArray = new byte[MStream.Length];
int count = MStream.Read(byteArray, 0, (int)MStream.Length - 1);
while (count < MStream.Length)
{
byteArray[count++] = Convert.ToByte(MStream.ReadByte());
}
char[] charArray = new char[Encoding.Default.GetCharCount(byteArray, 0, count)];
Encoding.Default.GetChars(byteArray, 0, count, charArray, 0);
for (int i = 0; i < charArray.Length; i++)
{
richTextBox2.Text += charArray[i].ToString();
}
}
6. Создайте и запишите данные двоичного файла
Идея: В основном используйте конструктор и метод Write класса BinaryWriter.
Пример: private void button2_Click(отправитель объекта, EventArgs e)
{
if (String.IsNullOrEmpty(textBox1.Text.Trim()))
{
MessageBox.Show("Выберите путь к файлу");
return;
}
if (String.IsNullOrEmpty(textBox2.Text.Trim()))
{
MessageBox.Show("Укажите имя файла");
return;
}
try
{
FileStream myStream = new FileStream(textBox1.Text + "\" + textBox2.Text+".bin", FileMode.Create);
BinaryWriter myWriter = new BinaryWriter(myStream);
for (int i = 0; i < 10; i++)
{
myWriter.Write(i);
}
myWriter.Close();
myStream.Close();
MessageBox.Show("Создать и записать успешно!");
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
7. Прочитайте содержимое бинарного файла
пример:
private void button1_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = "*.bin|*.bin";
openFileDialog1.ShowDialog();
textBox1.Text = openFileDialog1.FileName;
}
private void button2_Click(object sender, EventArgs e)
{
if (String.IsNullOrEmpty(textBox1.Text.Trim()))
{
MessageBox.Show("Выберите файл");
return;
}
textBox2.Text = string.Empty;
try
{
FileStream myStream = new FileStream(textBox1.Text, FileMode.Open, FileAccess.Read);
BinaryReader myReader = new BinaryReader(myStream);
for (int i = 0; i < myStream.Length; i++)
{
textBox2.Text += myReader.ReadInt32();
}
myReader.Close();
myStream.Close();
}
catch { }
}
8. Копируйте файлы, используя буферизованные потоки
Идея: при использовании буферизованного потока необходимо использовать класс BufferedStream в пространстве имен System.IO.Поток BufferedStream, также известный как буферизованный поток, добавляет уровень буфера к операциям чтения и записи в другом потоке. Буферизованный поток создает буфер в памяти, считывает байты с диска в буфер с наиболее эффективными приращениями и считывает байты с диска в буфер с наиболее эффективными приращениями. Буферы — это блоки байтов в памяти, которые используются для кэширования данных, чтобы уменьшить количество обращений к операционной системе, а буферы улучшают производительность чтения и записи.
- Метод Read класса BufferedStream. Этот метод реализует копирование массива байтов из текущего буферизованного потока. Формат следующий: public override int Read(byte[] array,int offset,int count)
параметр | инструкция |
---|---|
Array | скопировать байты в буфер |
Offset | Индекс позиции, с которой начинать чтение байтов |
Count | количество байтов для чтения |
возвращаемое значение | Общее количество байтов, прочитанных в массив byte array. Общее количество байтов может быть меньше запрошенного количества байтов, если не так много байтов доступно, как запрошено, или равно нулю, если конец потока достигнут до того, как какие-либо данные могут быть прочитаны. |
- Напишите метод класса BufferedStream. Этот метод реализует копирование байтов в буферный поток и сдвигает текущую позицию в буферном потоке на количество записанных байтов Синтаксис следующий: public override void Write(byte[] array,int offset,int count). Напишите описание параметра:
параметр | инструкция |
---|---|
Array | Массив байтов, из которого число байтов копируется в текущий поток буфера. |
Offset | Смещение буфера, с которого следует начать копирование байтов в текущий буферизованный поток. |
Count | Количество байтов для записи в текущий буферизованный поток |
возвращаемое значение | нет возвращаемого значения |
- Метод Flush класса BufferedStream. Реализация этого метода очищает все буферы для потока, так что все буферизованные данные записываются на базовое устройство. Формат синтаксиса: public override void Flush()
Примечание. Поскольку буферизованный поток считывает и записывает данные непосредственно в буфер памяти, а не считывает и записывает данные непосредственно с жесткого диска, он особенно подходит для обработки файлов большого объема.
пример:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = "Файл(*.*)|*.*";
openFileDialog1.ShowDialog();
textBox1.Text = openFileDialog1.FileName;
}
private void button2_Click(object sender, EventArgs e)
{
folderBrowserDialog1.ShowDialog();
textBox2.Text = folderBrowserDialog1.SelectedPath;
}
private void button3_Click(object sender, EventArgs e)
{
try
{
string str1 = textBox1.Text;
string str2 = textBox2.Text + "\" + textBox1.Text.Substring(textBox1.Text.LastIndexOf("\") + 1, textBox1.Text.Length - textBox1.Text.LastIndexOf("\") - 1);
Stream myStream1, myStream2;
BufferedStream myBStream1, myBStream2;
byte[] myByte = new byte[1024];
int i;
myStream1 = File.OpenRead(str1);
myStream2 = File.OpenWrite(str2);
myBStream1 = new BufferedStream(myStream1);
myBStream2 = new BufferedStream(myStream2);
i = myBStream1.Read(myByte, 0, 1024);
while (i > 0)
{
myBStream2.Write(myByte, 0, i);
i = myBStream1.Read(myByte, 0, 1024);
}
myBStream2.Flush();
myStream1.Close();
myBStream2.Close();
MessageBox.Show("Копирование файла завершено");
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
9. Как сжать файлы с помощью GzipStream?
Класс GzipStream находится в пространстве имен System.IO.Compression и предоставляет методы и свойства для сжатия и распаковки потоков. Этот класс представляет формат данных GZip, который включает значение проверки циклическим избыточным кодом, обнаруживающее повреждение данных. После создания сжатого потока с помощью класса GzipStream вы можете использовать метод Write этого класса для записи данных для реализации функции сжатия.
- Метод Write реализует запись сжимаемых байтов из указанного массива байтов в базовый поток. Синтаксис следующий:
Public override void Write(byte[] array,int offset, int count)
Описание параметра: (1) массив используется для хранения массива байтов, подлежащих сжатию. (2) Позиция начала чтения в массиве смещения (2) Количество байтов, сжатых по счетчику.
using System.IO.Compression;
namespace GZipFile
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = "Все файлы (*.*)|*.*";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
textBox1.Text = openFileDialog1.FileName;
}
}
private void button2_Click(object sender, EventArgs e)
{
if (String.IsNullOrEmpty(textBox1.Text))
{
MessageBox.Show("Выберите исходный файл!", "Информационная подсказка");
return;
}
if (String.IsNullOrEmpty(textBox2.Text))
{
MessageBox.Show("Пожалуйста, введите имя сжатого файла!", "Информационная подсказка");
return;
}
string str1 = textBox1.Text;
string str2 = textBox2.Text.Trim();
byte[] myByte = null;
FileStream myStream = null;
FileStream myDesStream = null;
GZipStream myComStream = null;
try
{
myStream = new FileStream(str1, FileMode.Open, FileAccess.Read, FileShare.Read);
myByte = new byte[myStream.Length];
myStream.Read(myByte, 0, myByte.Length);
myDesStream = new FileStream(str2, FileMode.OpenOrCreate, FileAccess.Write);
myComStream = new GZipStream(myDesStream, CompressionMode.Compress, true);
myComStream.Write(myByte, 0, myByte.Length);
MessageBox.Show("Файл сжат!");
}
catch { }
finally
{
myStream.Close();
myComStream.Close();
myDesStream.Close();
}
}
}
}
10. Как распаковать файлы с помощью Gzip
Идея: используйте метод Read класса GzipStream для чтения данных для выполнения распаковки. Синтаксис следующий:
Публичное переопределение int Read (массив байтов [], int offset, int count).
Описание параметра: (1) массив используется для хранения массива сжатых байтов. (2) Позиция начала чтения в массиве смещений (3) count Количество распакованных байтов. (4) Возвращаемое значение Количество байтов, распакованных в массив байтов. Возвращает 0 или количество прочитанных байтов, если достигнут конец потока
using System.IO.Compression;
namespace UnGzipFile
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = "Сжатый файл (*.gzip)|*.gzip";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
textBox1.Text = openFileDialog1.FileName;
}
}
private void button2_Click(object sender, EventArgs e)
{
if (String.IsNullOrEmpty(textBox1.Text))
{
MessageBox.Show("Пожалуйста, выберите файл GZIP!", "Информационная подсказка");
return;
}
if (String.IsNullOrEmpty(textBox2.Text))
{
MessageBox.Show("Пожалуйста, введите имя файла распаковки!", "Информационная подсказка");
return;
}
string str1 = textBox1.Text;
string str2 = textBox2.Text.Trim();
byte[] myByte = null;
FileStream myStream = null;
FileStream myDesStream = null;
GZipStream myDeComStream = null;
try
{
myStream = new FileStream(str1, FileMode.Open);
myDeComStream = new GZipStream(myStream, CompressionMode.Decompress, true);
myByte = new byte[4];
int myPosition = (int)myStream.Length - 4;
myStream.Position = myPosition;
myStream.Read(myByte, 0, 4);
myStream.Position = 0;
int myLength = BitConverter.ToInt32(myByte, 0);
byte[] myData = new byte[myLength + 100];
int myOffset = 0;
int myTotal = 0;
while (true)
{
int myBytesRead = myDeComStream.Read(myData, myOffset, 100);
if (myBytesRead == 0)
break;
myOffset += myBytesRead;
myTotal += myBytesRead;
}
myDesStream = new FileStream(str2, FileMode.Create);
myDesStream.Write(myData, 0, myTotal);
myDesStream.Flush();
MessageBox.Show("Разархивируйте файл!");
}
catch { }
finally
{
myStream.Close();
myDeComStream.Close();
myDesStream.Close();
}
}
}
}
11. Вызовите WinRAR для сжатия и распаковки файлов.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Diagnostics;
using System.IO;
public partial class Zip : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
//Сжатый файл
protected void Button1_Click(object sender, EventArgs e)
{
ProcessStartInfo startinfo = new ProcessStartInfo(); ;
Process process = new Process();
rarName = "1.rar";//имя сжатого файла
String path = @"C:\images"; // Папка для сжатия и упаковки
String rarPath = @"C:\zip"; //Сохраняем папку после сжатия
String rarexe = @"c:\Program Files\WinRAR\WinRAR.exe"; //местоположение установки WinRAR
try
{
//Команда сжатия, эквивалентная щелчку правой кнопкой мыши по папке для сжатия (путь) -> WinRAR -> Добавить в сжатый файл -> Введите имя сжатого файла (rarName)
string cmd = string.Format("a {0} {1} -r",
rarName,
path);
startinfo.FileName = rarexe;
Startinfo.Arguments = cmd;//Установить параметры команды
Startinfo.WindowStyle = ProcessWindowStyle.Hidden;//Скрыть окно WinRAR
startinfo.WorkingDirectory = rarPath;
process.StartInfo = startinfo;
process.Start();
process.WaitForExit();//Подождите, пока процесс winrar.exe завершится на неопределенный срок
if (process.HasExited)
{
MSCL.JsHelper.Alert("Сжатие выполнено успешно!", Страница);
}
}
catch (Exception ex)
{
MSCL.JsHelper.Alert(ex.Message, Page);
}
finally
{
process.Dispose();
process.Close();
}
}
//разархивировать файлы
protected void Button2_Click(object sender, EventArgs e)
{
ProcessStartInfo startinfo = new ProcessStartInfo(); ;
Process process = new Process();
String rarName = "1.rar";//Имя файла .rar для распаковки (включая суффикс)
String path = @"C:\images1"; //Путь распаковки файла (абсолютный)
String rarPath = @"C:\zip";//Каталог хранения распаковываемого файла .rar (абсолютный путь)
String rarexe = @"c:\Program Files\WinRAR\WinRAR.exe"; //местоположение установки WinRAR
try
{
//Команда распаковки эквивалентна щелчку правой кнопкой мыши по сжимаемому файлу (rarName)->WinRAR->Распаковка в текущую папку
string cmd = string.Format("x {0} {1} -y",
rarName,
path);
startinfo.FileName = rarexe;
Startinfo.Arguments = cmd;//Установить параметры команды
Startinfo.WindowStyle = ProcessWindowStyle.Hidden;//Скрыть окно WinRAR
startinfo.WorkingDirectory = rarPath;
process.StartInfo = startinfo;
process.Start();
process.WaitForExit();//Подождите, пока процесс winrar.exe завершится на неопределенный срок
if (process.HasExited)
{
MSCL.JsHelper.Alert("Успешная распаковка!", Страница);
}
}
catch (Exception ex)
{
MSCL.JsHelper.Alert(ex.Message, Page);
}
finally
{
process.Dispose();
process.Close();
}
}
}