Операции с файлами и папками — список операций с файлами

искусственный интеллект

1. Получите размер файла

Идея: используйте метод Open класса File, чтобы открыть указанный файл, а затем используйте свойство Length класса FileStream, чтобы получить длину файла.

(1) Метод Open класса File: используется для открытия FileStream по указанному пути, локальные права доступа на чтение/запись Формат синтаксиса: общедоступный статический FileStream Open (строковый путь, режим FileMode)

Описание параметра: путь: файл, который нужно открыть. mode : одно из значений перечисления FileMode

значение перечисления инструкция
CreateNew Указывает, что операционная система должна создавать новые файлы
Create Указывает, что операционная система должна создать новый файл, если файл уже существует, он будет перезаписан.
Open Указывает, что операционная система должна открыть существующий файл
OpenOrCreate Указывает, что операционная система должна открыть файл (если файл существует, в противном случае создать новый файл)
Truncate Указывает операционную систему для открытия существующего файла. После открытия файла его размер будет усечен до нуля байт.
Append Откройте существующий файл и перейдите в конец файла или создайте новый файл.

(2), свойство Length класса FileStream

Свойство Length класса FileStream используется для получения длины потока в байтах.Синтаксис:

Public override long Length{get;}

Примечание. При использовании в программе классов, связанных с файлами, необходимо добавить пространство имен System.IO

private void button1_Click(object sender, EventArgs e)

        {

OpenFileDialog openDialog = new OpenFileDialog();//Создаем объект диалога открытия файла

If (openDialog.ShowDialog()==DialogResult.OK)//Определяем, выбран ли файл

            {

MessageBox.Show("Длина файла:"+File.Open(openDialog.FileName,FileMode.Open).Length+"byte");//Всплывает диалоговое окно сообщения

            }

        }

2. Получите суффикс имени файла:

      OpenFileDialog openDialog = new OpenFileDialog();

            if (openDialog.ShowDialog()==DialogResult.OK)

            {

              string a = openDialog.FileName.Substring(openDialog.FileName.LastIndexOf(".") + 1, openDialog.FileName.Length - openDialog.FileName.LastIndexOf(".") - 1);

                MessageBox.Show(a);

            }

3. Получить время создания файла:

  OpenFileDialog openDialog = new OpenFileDialog();

            if (openDialog.ShowDialog()==DialogResult.OK)

            {

                FileInfo f = new FileInfo(openDialog.FileName);

                MessageBox.Show(f.CreationTime.ToString());

            }

Примечание. Получить время последней модификации файла: FileInfo.LastWriteTime.ToString();

4. Получить запрещенные символы в именах файлов

Идея: в этом примере в основном используется метод GetInvalidFileNameChars() класса Path Синтаксис:

   public static char[] GetInvalidFileNameChars();

Возвращаемое значение: массив, содержащий символы, недопустимые в именах файлов.

Примечание. Класс Path находится в пространстве имен System.IO.

пример:

char[] aa = Path.GetInvalidFileNameChars();

            foreach (char a in aa)

            {

                listBox1.Items.Add(Convert.ToInt32(a).ToString());

            }

5. Создание и удаление файлов

Метод Create класса File создает файл по указанному пути.Этот метод может перегружать метод.Синтаксис:

public static FileStream Create(string path);

Описание параметра:

Путь: путь и имя создаваемого файла.

Возвращаемое значение: FileStream, предоставляющий доступ для чтения и записи к файлу, указанному в пути.

Метод Delete класса File используется для удаления указанного файла, и если он не существует, исключение не выдается. грамматика:

   public static void Delete(string path);

пример:

   private void btn_Create_Click(object sender, EventArgs e)

        {

SaveFileDialog P_SaveFileDialog = new SaveFileDialog();//Создаем объект диалога сохранения файла

If (P_SaveFileDialog.ShowDialog() == DialogResult.OK)//Определяем, сохранять ли файл

            {

File.Create(P_SaveFileDialog.FileName);//Создаем файл

            }

        }

 

        private void btn_Remove_Click(object sender, EventArgs e)

        {

OpenFileDialog P_OpenFileDialog = new OpenFileDialog();//Создать объект диалога открытия файла

If (P_OpenFileDialog.ShowDialog() == DialogResult.OK)//Определяем, нужно ли удалять файл

            {

File.Delete(P_OpenFileDialog.FileName);//Удалить файл

            }

        }

6. Очистите корзину

Идея: Очистка корзины в основном использует системную функцию API SHEmptyRecycleBin, синтаксис которой следующий:

[DllImportAttribute("shell32.dll")] //Объявление функций API

private static extern int SHEmptyRecycleBin(IntPtr handle, string root, int falgs);

Описание параметра: handle: дескриптор родительского окна.

Корень: адрес очищаемой корзины. Если он равен нулю, корзина на всех дисках будет очищена.

Falgs: параметры функции для очистки корзины.

Примечание. При использовании системных функций API сначала необходимо добавить пространство имен System.Runtime.InterServices в область пространства имен.

пример:

const int SHERB_NOCONFIRMATION = 0x000001; // Целочисленная константа в API указывает на отсутствие диалога подтверждения при удалении

const int SHERB_NOPROGRESSUI = 0x000002; //В API это означает, что индикатор выполнения удаления не отображается

const int SHERB_NOSOUND = 0x000004;

 

[DllImportAttribute("shell32.dll")] //Объявить функцию API

        private static extern int SHEmptyRecycleBin(IntPtr handle, string root, int falgs);

 

        private void button1_Click(object sender, EventArgs e)

        {

//Очистить корзину

            SHEmptyRecycleBin(this.Handle, "", SHERB_NOCONFIRMATION + SHERB_NOPROGRESSUI + SHERB_NOSOUND);

        }

7. Изменить атрибуты файла

Идея: при изменении атрибутов файла используется атрибут Attributes класса FileInfo Формат синтаксиса следующий:

public FileAttributes Attributes { get; set; }

Описание параметра:

 

Одно из перечислений FileAttribute.

пример:

 

private void button2_Click(object sender, EventArgs e)

        {

System.IO.FileInfo f = new System.IO.FileInfo(textBox1.Text);//Создаем экземпляр класса FileInfo

if (checkBox1.Checked == true) //если установлен флажок только для чтения

            {

f.Attributes = System.IO.FileAttributes.ReadOnly;//Устанавливаем файл только для чтения

            }

If (checkBox2.Checked == true) //Если установлен системный флажок

            {

f.Attributes = System.IO.FileAttributes.System;//Установить файл в систему

            }

if (checkBox3.Checked == true) //если отмечен флажок архива

            {

f.Attributes = System.IO.FileAttributes.Archive;//Устанавливаем файл в архив

            }

if (checkBox4.Checked == true) //если отмечен скрытый чекбокс

            {

f.Attributes = System.IO.FileAttributes.Hidden;//Сделать файл скрытым

            }

        }

8. Преобразование длинных имен файлов в короткие имена файлов

GetShortPathName — это функция API ядра, которая преобразует длинные имена файлов в короткие. Синтаксис следующий:

[DllImport("Kernel32.dll")]//Объявить функции API

private static extern Int16 GetShortPathName(string lpszLongPath, StringBuilder lpszShortPath, Int16 cchBuffer);

Описание параметра:

lpszLongPath: Укажите имя файла, имя пути которого необходимо получить. Может быть полным путем или определяется текущим каталогом.

lpszShortPath: укажите буфер для короткого пути и имени загруженного файла.

cchBuffer: длина буфера lpszShortPath

пример:

[DllImport("Kernel32.dll")]//Объявить функции API

        private static extern Int16 GetShortPathName(string lpszLongPath, StringBuilder lpszShortPath, Int16 cchBuffer);

 

        private void button1_Click(object sender, EventArgs e)

        {

OpenFileDialog OFDialog = new OpenFileDialog();//Создать объект OpenFileDialog

If (OFDialog.ShowDialog() == DialogResult.OK)//Определяем, выбран ли файл

            {

TextBox1.Text = OFDialog.FileName;//Показать имя выбранного файла

String longName = textBox1.Text;//Записываем имя выбранного файла

StringBuilder shortName = new System.Text.StringBuilder(256);//Создать объект StringBuilder

GetShortPathName(longName, shortName, 256);//Вызов функции API для преобразования в короткое имя файла

String myInfo = "Длинное имя файла:" + longName;//Показать длинное имя файла

myInfo += "\nКороткое имя файла:" + shortName;//Показать короткое имя файла

                label2.Text = myInfo;

            }

        }

9. Пример копирования одного файла

Пример 1. BackgroundWorker реализует асинхронное копирование файлов и отображает исходный код в процентах.

Используйте компонент BackgroundWorker, чтобы страница не отображалась в режиме ожидания.

интерфейс:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.IO;

namespace WangHao

{

    public partial class backgroundworder : Form

    {

        BackgroundWorker worker = null;

        public backgroundworder()

        {

            InitializeComponent();

            progressBar1.Minimum = 0;

            progressBar1.Maximum = 100;

            worker = new BackgroundWorker();

            worker.WorkerReportsProgress = true;

            worker.WorkerSupportsCancellation = true;

            worker.DoWork += new DoWorkEventHandler(worker_DoWork);

            worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged);

            worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);

        }

        void worker_DoWork(object sender, DoWorkEventArgs e)

        {

          try

            {

                if (e.Argument != null && e.Argument is FilePair)

                {

                    FilePair obj = (FilePair)e.Argument;

                    string orgFile = obj.OrgFile;

                    string newFile = obj.NewFile;

                    FileStream readFileStream = new FileStream(orgFile, FileMode.Open, FileAccess.Read);

                    FileStream writeFileStream = new FileStream(newFile, FileMode.Create, FileAccess.Write);

                    DateTime start = DateTime.Now;

                    TimeSpan ts;

                    long totalByte = readFileStream.Length;

                    int buffLength = 1024 * 1024 * 64;

                    byte[] buff = new byte[buffLength];

                    long writtenByte = 0;

                    int everytimeReadByteLength = readFileStream.Read(buff, 0, buffLength);

                    while (everytimeReadByteLength > 0)

                    {

                        writeFileStream.Write(buff, 0, everytimeReadByteLength);

                        everytimeReadByteLength = readFileStream.Read(buff, 0, buffLength);

                        writtenByte += everytimeReadByteLength;

                        int percent = (int)(writtenByte * 100 / totalByte);

                        ts = DateTime.Now.Subtract(start);

                        double speed = (double)writtenByte / ts.TotalMilliseconds * 1000 / (1024 * 1024);

                        obj.Speed = speed;

worker.ReportProgress(percent, obj);//Передать пользовательский объект

                    }

                    writeFileStream.Close();

                    readFileStream.Close();

                    worker.ReportProgress(100);

                }

            }

            catch (Exception ex)

            {

                worker.ReportProgress(100, ex);

            }

        }

        void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)

        {

            FilePair obj = e.UserState as FilePair;

            progressBar1.Value = e.ProgressPercentage;

            label3.Text = e.ProgressPercentage + "%";

            if (obj != null)

            {               

lblMsg.Text = "Копирование, скорость копирования" + obj.Speed.ToString() + "M";

            }

        }

        void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)

        {

lblMsg.Text = "Копирование файла завершено";

        }

        private void button1_Click(object sender, EventArgs e)

        {

            progressBar1.Value = 0;

            string orgFile = textBox1.Text.Trim();

            string newFile = textBox2.Text.Trim();

            if (System.IO.File.Exists(orgFile))

            {

                bool copy = true;

                if (System.IO.File.Exists(newFile))

                {

If (DialogResult.Cancel == MessageBox.Show("Новый файл уже существует, не продолжайте копирование, новый файл будет перезаписан", "Файл уже существует", MessageBoxButtons.OKCancel))

                    {

                        copy = false;

                    }

                }

                if (copy)

                {

                    FilePair fileObj = new FilePair(orgFile, newFile);

lblMsg.Text = "Начать копирование файла";

                    worker.RunWorkerAsync(fileObj);

                }

            }

            else

            {

lblMsg.Text = "Исходный файл не существует";

            }

        }

    }

    public class FilePair

    {

        private string _orgFile;

        private string _newFile;

        public FilePair(string orgfile, string newfile)

        {

            _orgFile = orgfile;

            _newFile = newfile;

        }

        public string OrgFile

        {

            get { return _orgFile; }

            set { _orgFile = value; }

        }

        public string NewFile

        {

            get { return _newFile; }

            set { _newFile = value; }

        }

        public double Speed { get; set; }

    }

}

Пример 2: Копирование одного файла в многопоточном режиме

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.IO;

using System.Threading;//Пространство имен потоковой программы

using Microsoft.Win32.SafeHandles;

using System.Runtime.InteropServices;

namespace FileCopyPlan

{

открытый делегат void SpeedAndProgress(двойная скорость, двойной прогресс);//Определить делегата

    public partial class Frm_Main : Form

    {

        public Frm_Main()

        {

            InitializeComponent();

        }

private System.Threading.Thread thdAddFile;//Создаем поток

        private string str = "";

        private void button1_Click(object sender, EventArgs e)

        {

If (openFileDialog1.ShowDialog() == DialogResult.OK)//Диалог открытия файла

TextBox1.Text = openFileDialog1.FileName;//Получить путь к исходному файлу

        }

        private void button2_Click(object sender, EventArgs e)

        {

If (folderBrowserDialog1.ShowDialog() == DialogResult.OK)//Открыть диалоговое окно папки

TextBox2.Text = folderBrowserDialog1.SelectedPath;//Получить путь к целевому файлу

        }

        private void button3_Click(object sender, EventArgs e)

        {

            if (textBox1.Text.Length == 0 || textBox2.Text.Length == 0)

            {

MessageBox.Show("Пожалуйста, выберите исходный путь к файлу или путь к целевому файлу.");

                return;

            }

str = textBox1.Text;//Записываем путь к исходному файлу

str = "\" + str.Substring(str.LastIndexOf('\') + 1, str.Length - str.LastIndexOf('\') - 1);//Получить имя исходного файла

thdAddFile = new Thread(new ThreadStart(RunAddFile));//Создать поток

            thdAddFile.IsBackground = true;

thdAddFile.Start();//Выполнить текущий поток

        }

        /// <summary>

/// Скопируйте файл и закройте поток после завершения копирования

        /// </summary>

        public void RunAddFile()

        {

            FileOperation fo = new FileOperation();

            fo.OnSpeedAndProgress += new SpeedAndProgress(Frm_Main_OnSpeedAndProgress);

fo.CopyFile(textBox1.Text, textBox2.Text + str, 1024 * 1024 * 64, progressBar1);//Копировать файл

MessageBox.Show("Копирование завершено", "Подсказка", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);

thdAddFile.Abort();//Закрыть поток

        }

        /// <summary>

/// Копируем файл

        /// </summary>

/// Путь к исходному файлу

/// Путь к файлу назначения

/// Размер передачи

/// Элемент управления ProgressBar

        void Frm_Main_OnSpeedAndProgress(double speed, double progress)

{//Ключ к предотвращению зависания: вызывайте отображение формы при настройке хода выполнения и освобождайте поток пользовательского интерфейса, когда он не вызывается, чтобы убедиться, что основная форма не зависает.

This.BeginInvoke(new SpeedAndProgress(aa), new object[] { speed, progress });//Выполнить указанный делегат в потоке

        }

        void aa(double speed, double progress)

        {

            progressBar1.Value = Convert.ToInt32(progress);

            label1.Text = speed.ToString();

            label1.Refresh();

        }

    }

    public class FileOperation

    {

        public event SpeedAndProgress OnSpeedAndProgress;

        public const short FILE_ATTRIBUTE_NORMAL = 0x80;

        public const short INVALID_HANDLE_VALUE = -1;

        public const uint GENERIC_READ = 0x80000000;

        public const uint GENERIC_WRITE = 0x40000000;

        public const uint CREATE_NEW = 1;

        public const uint CREATE_ALWAYS = 2;

        public const uint OPEN_EXISTING = 3;

        public const uint FILE_FLAG_NO_BUFFERING = 0x20000000;

        public const uint FILE_FLAG_WRITE_THROUGH = 0x80000000;

        public const uint FILE_SHARE_READ = 0x00000001;

        public const uint FILE_SHARE_WRITE = 0x00000002;

        // Use interop to call the CreateFile function.

        // For more information about CreateFile,

        // see the unmanaged MSDN reference library.

        [DllImport("kernel32.dll", SetLastError = true)]

        static extern SafeFileHandle CreateFile(string lpFileName, uint dwDesiredAccess,

        uint dwShareMode, IntPtr lpSecurityAttributes, uint dwCreationDisposition,

        uint dwFlagsAndAttributes, IntPtr hTemplateFile);

        public void CopyFile(string FormerFile, string toFile, int SectSize, ProgressBar progressBar1)

        {

            bool useBuffer = true;

            SafeFileHandle fr = CreateFile(FormerFile, GENERIC_READ, FILE_SHARE_READ, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero);

            SafeFileHandle fw = CreateFile(toFile, GENERIC_WRITE, FILE_SHARE_READ, IntPtr.Zero, CREATE_ALWAYS, 0, IntPtr.Zero);

progressBar1.Value = 0;//Установить текущую позицию индикатора выполнения на 0

progressBar1.Minimum = 0;//Устанавливаем минимальное значение индикатора выполнения на 0

            progressBar1.Maximum = 100;

            int bufferSize = useBuffer ? 1024 * 1024 * 64 : 1024 * 1024 * 64;

            FileStream fsr = new FileStream(fr, FileAccess.Read);

            FileStream fsw = new FileStream(fw, FileAccess.Write);

            BinaryReader br = new BinaryReader(fsr);

            BinaryWriter bw = new BinaryWriter(fsw);

            byte[] buffer = new byte[bufferSize];

            Int64 len = fsr.Length;

            DateTime start = DateTime.Now;

            TimeSpan ts;

            while (fsr.Position < fsr.Length)

            {

                int readCount = br.Read(buffer, 0, bufferSize);

                bw.Write(buffer, 0, readCount);

                ts = DateTime.Now.Subtract(start);

                double speed = (double)fsr.Position / ts.TotalMilliseconds * 1000 / (1024 * 1024);

                double progress = (double)fsr.Position / len * 100;

                if (OnSpeedAndProgress != null)

                {

                    OnSpeedAndProgress(speed, progress);

                }

            }

            br.Close();

            bw.Close();

        }

    }

}

10, INI-файл операции С#

Идеи: Для файловых INI-операций в основном используются системные API-функции GetPrivateProfileString и WritePrivateProfileString.

  1. GetPrivateProfileString Эта функция в основном используется для чтения содержимого файла INI. Синтаксис следующий: [DllImport("kernel32")]

private static extern int GetPrivateProfileString(string lpAppName,string lpKeyName,

string lpDefault,StringBuilder lpReturnedString,int nSize,string lpFileName);

Описание параметра:

параметр инструкция
lpAppName Представляет значение корневого узла внутри INI-файла.
lpKeyName Представляет значение дочернего тега в корневом узле.
lpDefault Указывает значение по умолчанию, когда значение тега не задано или не существует.
lpReturnedString Указывает, что возвращается значение прочитанного узла
nSize Указывает максимальную емкость содержимого узла для чтения
lpFileName Указывает полный путь к файлу
  1. Функция WritePrivateProfileString используется для записи данных в файл INI.

  [DllImport("kernel32")]

   private static extern long WritePrivateProfileString(string mpAppName,string mpKeyName,

string mpDefault,string mpFileName);

Описание параметра:

параметр инструкция
mpAppName Представляет значение корневого узла внутри INI.
mpKeyName Указывает имя тега, который необходимо изменить.
mpDefault Указывает, что вы хотите изменить
mpFileName Указывает полный путь к файлу INI.

пример:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.IO;

using System.Runtime.InteropServices;

namespace INIFileOperate

{

    public partial class Frm_Main : Form

    {

        public Frm_Main()

        {

            InitializeComponent();

        }

#region область объявления переменной

public string str = "";//Эта переменная сохраняет конкретное физическое местоположение, где находится INI-файл

        public string strOne = "";

        [DllImport("kernel32")]

        private static extern int GetPrivateProfileString(

            string lpAppName,

            string lpKeyName,

            string lpDefault,

            StringBuilder lpReturnedString,

            int nSize,

            string lpFileName);

        public string ContentReader(string area, string key, string def)

        {

StringBuilder stringBuilder = new StringBuilder(1024); // Определяем переменную строку максимальной длины 1024

GetPrivateProfileString(area, key, def, stringBuilder, 1024, str); // Чтение INI-файла

Возвращаем stringBuilder.ToString();//Возвращаем содержимое INI-файла

        }

        [DllImport("kernel32")]

        private static extern long WritePrivateProfileString(

            string mpAppName,

            string mpKeyName,

            string mpDefault,

            string mpFileName);

        #endregion

часть загрузки формы #region

        private void Form1_Load(object sender, EventArgs e)

        {

str = Application.StartupPath + "\\ConnectString.ini";//Физический адрес INI-файла

strOne = System.IO.Path.GetFileNameWithoutExtension(str);//Получить имя файла INI-файла

if (File.Exists(str)) if (File.Exists(str)) //Определяем, существует ли файл INI

            {

Server.Text = ContentReader(strOne, "Data Source", "");//Чтение содержимого узла сервера в INI-файле

database.Text = ContentReader(strOne, "DataBase", "");//Чтение содержимого узла базы данных в INI-файле

uid.Text = ContentReader(strOne, "Uid", "");//Чтение содержимого пользовательского узла в INI-файле

pwd.Text = ContentReader(strOne, "Pwd", "");//Чтение содержимого узла пароля в INI-файле

            }

        }

        #endregion

#регион для модификации

        private void button1_Click(object sender, EventArgs e)

        {

if (File.Exists(str)) if (File.Exists(str)) //Определяем, существует ли INI-файл

            {

//Изменить содержимое узла сервера в INI-файле

WritePrivateProfileString(strOne, "DataBase", database.Text, str); //Изменяем содержимое узла базы данных в INI-файле

//Изменяем содержимое пользовательского узла в INI-файле

WritePrivateProfileString(strOne, "Pwd", pwd.Text, str);//Изменяем содержимое узла пароля в INI-файле

MessageBox.Show("Поздравляем, модификация прошла успешно!", "Информация", MessageBoxButtons.OK, MessageBoxIcon.Информация);

            }

            else

            {

MessageBox.Show("К сожалению, файл, который вы хотите изменить, не существует, пожалуйста, подтвердите и измените его!", "Информация", MessageBoxButtons.OK, MessageBoxIcon.Information);

            }

        }

        #endregion

    }

}

11. Создавайте PDF-файлы

Идея: Для создания PDF-документов используется сторонний компонент itextsharp.dll.
пример:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using iTextSharp.text;

using iTextSharp.text.pdf;

using System.IO;

namespace CreatePDFDocument

{

    public partial class Frm_Main : Form

    {

        public Frm_Main()

        {

            InitializeComponent();

        }

//Эта переменная содержит имя документа PDF

        public static string filePath = "";

//Создаем PDF-документ

        private void button1_Click(object sender, EventArgs e)

        {

SaveFileDialog saveFileDialog = new SaveFileDialog(); // Предоставляем информацию о сохранении файла и определяем место сохранения

saveFileDialog.Filter = "Файл PDF (*.PDF)|*.PDF";

            if (saveFileDialog.ShowDialog() == DialogResult.OK)

            {

                filePath = saveFileDialog.FileName;

//Начнем создавать PDF-документ, сначала объявив объект Document

                Document document = new Document();

//Инициализировать объект файлового потока с указанным путем и режимом создания

                PdfWriter.getInstance(document, new FileStream(filePath, FileMode.Create));

Document.Open();//Открываем документ

                BaseFont baseFont = BaseFont.createFont(@"c:\windows\fonts\SIMSUN.TTC,1", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

iTextSharp.text.Font font = new iTextSharp.text.Font(baseFont, 20);//Установить стиль шрифта документа

Document.Add(new Paragraph(richTextBox1.Text, font));//Добавить содержимое в документ PDF

Document.Close();//Закрываем документ

MessageBox.Show("Поздравляем, документ успешно создан!", "Информация", MessageBoxButtons.OK, MessageBoxIcon.Информация);

            }

        }

    }

}

12. Определяем, занят ли файл

пример:

using System.IO;

using System.Runtime.InteropServices;

[DllImport("kernel32.dll")]

public static extern IntPtr _lopen(string lpPathName, int iReadWrite);

[DllImport("kernel32.dll")]

public static extern bool CloseHandle(IntPtr hObject);

public const int OF_READWRITE = 2;

public const int OF_SHARE_DENY_NONE = 0x40;

public readonly IntPtr HFILE_ERROR = new IntPtr(-1);

private void button1_Click(object sender, EventArgs e)

{

    string vFileName = @"c:\temp\temp.bmp";

    if (!File.Exists(vFileName))

    {

MessageBox.Show("Файл не существует!");

        return;

    }

    IntPtr vHandle = _lopen(vFileName, OF_READWRITE | OF_SHARE_DENY_NONE);

    if (vHandle == HFILE_ERROR)

    {

MessageBox.Show("Файл занят!");

        return;

    }

    CloseHandle(vHandle);

MessageBox.Show("Не занято!");

}

13. Реализовать операцию перетаскивания файлов

Идея: Для реализации операции перетаскивания файлов в основном используется свойство Data класса DragEventArgs и метод GetDataPresent класса DataObject.

  1. Свойство данных класса DragEventArgs

Класс DragEventArgs содержит параметры, относящиеся ко всем событиям перетаскивания (DragEnter, DragLeave, DragOver и Drop), а его свойство Data используется для чтения объекта данных, содержащего данные, связанные с соответствующим событием перетаскивания. Синтаксис свойства Data следующий:

public IDataObject Data { get; }

Описание параметра: значение свойства, объект данных, объект содержит данные, связанные с соответствующим событием перетаскивания.

  1. Метод GetDataPresent класса DataObject

Класс DataObject в основном реализует механизм передачи данных, а его метод GetDataPresent используется для определения того, связаны ли данные, хранящиеся в объекте DataObject, с указанным форматом.

bool GetDataPresent(string format);

Описание параметра: format: Проверяемый формат. Возвращаемое значение: True, если данные, хранящиеся в объекте DataObject, связаны с указанным форматом или могут быть преобразованы в указанный формат; в противном случае — false.

  1. Метод GetData класса DataObject

Метод GetData класса DataObject используется для возврата данных, связанных с указанным форматом данных.Синтаксис следующий:

object GetData(string format);

формат: формат данных для проверки.

Возвращаемое значение: данные, связанные с указанным форматом, или не нуль.

пример:

  public partial class Frm_Main : Form

    {

        public Frm_Main()

        {

            InitializeComponent();

        }

        private void Form1_Load(object sender, EventArgs e)

        {

            this.AllowDrop = true;

        }

        private void Form1_DragEnter(object sender, DragEventArgs e)

        {

            if (e.Data.GetDataPresent(DataFormats.FileDrop))

            {

String[] files = (string[])e.Data.GetData(DataFormats.FileDrop);//Получить основную информацию о перетаскиваемом файле

for (int i = 0; i

                {

ListBox1.Items.Add(files[i]);//Путь для добавления файлов

                }

            }

        }

}

14. Разделите файлы на несколько небольших файлов и объедините

Идея: Операция разделения файлов в основном реализуется через классы FileStream, BinaryReader и BinaryWriter. Инициализируйте файловый поток FileStream со строкой, соответствующей полному пути к файлу и режиму открытия файла, затем инициализируйте средство чтения файлов BinaryReader с файловым потоком FileStream и, наконец, разделите большой файл на несколько небольших файлов с помощью цикла инструкции for.

  1. BinaryReader, который в основном использует определенную кодировку для чтения примитивных типов данных как двоичных значений, а его конструктор в основном использует UTF8Encoding для инициализации экземпляров класса BinaryReader. Синтаксис следующий:

public BinaryReader(Stream input);

При разделении файла используется метод ReadBytes класса BinaryReader, который используется для чтения байтов count из текущего потока в массив байтов и продвижения текущей позиции на байты count. Синтаксис следующий:

public virtual byte[] ReadBytes(int count);

  1. Класс BinaryWriter записывает тип Jiyuan в поток в двоичной форме и поддерживает запись строк в определенной кодировке. Его конструктор в основном использует UTF-8 в качестве кодировки строки для инициализации экземпляра класса BinaryWriter. Синтаксис следующий: public BinaryWriter (потоковый вывод);

Метод Write класса BinaryWriter используется для записи содержимого в разделяемый файл Этот метод используется для записи значения в текущий Синтаксис следующий: public virtual void Write(byte[] buffer);

пример:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.IO;

namespace FileComminuteUnite

{

    public partial class Frm_Main : Form

    {

        public Frm_Main()

        {

            InitializeComponent();

        }

#region разделенный файл

        /// <summary>

/// разделить файл

        /// </summary>

/// Разделить блок

/// размер разделения

/// Путь хранения сегментированного файла

/// Файл для разделения

/// Отображение индикатора выполнения

        public void SplitFile(string strFlag, int intFlag, string strPath, string strFile, ProgressBar PBar)

        {

            int iFileSize = 0;

//Установить размер разделенных небольших файлов в соответствии с выбором

            switch (strFlag)

            {

                case "Byte":

                    iFileSize = intFlag;

                    break;

                case "KB":

                    iFileSize = intFlag * 1024;

                    break;

                case "MB":

                    iFileSize = intFlag * 1024 * 1024;

                    break;

                case "GB":

                    iFileSize = intFlag * 1024 * 1024 * 1024;

                    break;

            }

FileStream SplitFileStream = new FileStream(strFile, FileMode.Open);//Инициализировать экземпляр файлового потока FileStream строкой, соответствующей полному пути к файлу и режиму открытия файла

BinaryReader SplitFileReader = new BinaryReader(SplitFileStream);//Инициализировать программу чтения файлов BinaryReader с файловым потоком FileStream

Byte[] TempBytes;//Максимальное количество данных, прочитанных за разбивку

int iFileCount = (int)(SplitFileStream.Length / iFileSize);//Общее количество маленьких файлов

            PBar.Maximum = iFileCount;

            if (SplitFileStream.Length % iFileSize != 0) iFileCount++;

            string[] TempExtra = strFile.Split('.');

//Цикл разбивает большой файл на несколько маленьких файлов

            for (int i = 1; i <= iFileCount; i++)

            {

//Определяем имя файла маленького файла

String sTempFileName = strPath + @"\" + i.ToString().PadLeft(4, '0') + "." + TempExtra[TempExtra.Length - 1];//Маленькое имя файла

FileStream TempStream = new FileStream(sTempFileName, FileMode.OpenOrCreate);//Инициализировать экземпляр файлового потока FileStream в соответствии с именем файла и режимом открытия файла

BinaryWriter TempWriter = new BinaryWriter(TempStream); //Создание и инициализация экземпляра модуля записи BinaryWriter с экземпляром FileStream

TempBytes = SplitFileReader.ReadBytes(iFileSize);//Чтение данных указанного размера из большого файла

TempWriter.Write(TempBytes);//Записываем эти данные в небольшой файл

TempWriter.Close();//Закрываем модуль записи, чтобы сформировать небольшой файл

TempStream.Close();//Закрываем файловый поток

                PBar.Value = i - 1;

            }

SplitFileReader.Close();//Закрываем программу чтения больших файлов

            SplitFileStream.Close();

MessageBox.Show("Успешная сегментация файла!");

        }

        #endregion

        private void frmSplit_Load(object sender, EventArgs e)

        {

timer1.Start();//Запускаем таймер

        }

//Выбираем файл для разделения

        private void btnSFile_Click(object sender, EventArgs e)

        {

            if (openFileDialog.ShowDialog() == DialogResult.OK)

            {

                txtFile.Text = openFileDialog.FileName;

            }

        }

//Выполнить операцию разделения файла

        private void btnSplit_Click(object sender, EventArgs e)

        {

            try

            {

                if (txtLength.Text == ""||txtFile.Text.Trim()==""||txtPath.Text.Trim()=="")

                {

MessageBox.Show("Пожалуйста, заполните информацию полностью!", "Подсказка", MessageBoxButtons.OK, MessageBoxIcon.Information);

                    txtLength.Focus();

                }

                else if (cboxUnit.Text == "")

                {

MessageBox.Show("Пожалуйста, выберите файл для разделения!", "Подсказка", MessageBoxButtons.OK, MessageBoxIcon.Information);

                    cboxUnit.Focus();

                }

                else

                {

                    SplitFile(cboxUnit.Text, Convert.ToInt32(txtLength.Text.Trim()), txtPath.Text, txtFile.Text, progressBar);

                }

            }

            catch { }

        }

//Выбираем путь хранения разделенного файла

        private void btnSPath_Click(object sender, EventArgs e)

        {

            if (folderBrowserDialog.ShowDialog() == DialogResult.OK)

            {

                txtPath.Text = folderBrowserDialog.SelectedPath;

            }

        }

//Контролируем доступный статус кнопок "Разделить"/"Объединить"

        private void timer1_Tick(object sender, EventArgs e)

        {

            if (txtFile.Text != "" && txtPath.Text != "")

                btnSplit.Enabled = true;

            else

                btnSplit.Enabled = false;

        }

    }

}

объединить файлы

 

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.IO;

namespace FileComminuteUnite

{

    public partial class Frm_Main : Form

    {

        public Frm_Main()

        {

            InitializeComponent();

        }

#region объединить файлы

        /// <summary>

/// Объединяем файлы

        /// </summary>

/// коллекция файлов для слияния

/// Имя объединенного файла

/// Отображение индикатора выполнения

        public void CombinFile(string[] strFile, string strPath, ProgressBar PBar)

        {

            PBar.Maximum = strFile.Length;

            FileStream AddStream = null;

//Создаем и инициализируем файловый поток FileStream с объединенным именем файла и методом открытия

            AddStream = new FileStream(strPath, FileMode.Append);

//Инициализируем модуль записи BinaryWriter с файловым потоком FileStream, который используется для объединения разделенных файлов

            BinaryWriter AddWriter = new BinaryWriter(AddStream);

            FileStream TempStream = null;

            BinaryReader TempReader = null;

// Объединяем небольшие файлы в цикле и генерируем объединенный файл

            for (int i = 0; i < strFile.Length; i++)

            {

//Инициализируем файловый поток FileStream с именем файла и режимом открытия, соответствующим маленькому файлу, который играет роль чтения и разделения

                TempStream = new FileStream(strFile[i].ToString(), FileMode.Open);

                TempReader = new BinaryReader(TempStream);

//Чтение данных в разделенном файле и создание объединенного файла

                AddWriter.Write(TempReader.ReadBytes((int)TempStream.Length));

//Закрываем программу чтения файлов BinaryReader

                TempReader.Close();

//Закрываем файловый поток FileStream

                TempStream.Close();

                PBar.Value = i + 1;

            }

//Закрываем средство записи файлов BinaryWriter

            AddWriter.Close();

//Закрываем файловый поток FileStream

            AddStream.Close();

MessageBox.Show("Файл успешно объединен!");

        }

        #endregion

        private void frmSplit_Load(object sender, EventArgs e)

        {

timer1.Start();//Запускаем таймер

        }

//Выбираем файл для синтеза

        private void btnCFile_Click(object sender, EventArgs e)

        {

            if (openFileDialog.ShowDialog() == DialogResult.OK)

            {

                string Selectfile = "";

                string[] files = openFileDialog.FileNames;

                for (int i = 0; i < files.Length; i++)

                {

                    Selectfile += "," + files[i].ToString();

                }

                if (Selectfile.StartsWith(","))

                {

                    Selectfile = Selectfile.Substring(1);

                }

                if (Selectfile.EndsWith(","))

                {

                    Selectfile.Remove(Selectfile.LastIndexOf(","),1);

                }

                txtCFile.Text = Selectfile;

            }

        }

//Выбираем путь хранения синтезированного файла

        private void btnCPath_Click(object sender, EventArgs e)

        {

            if (saveFileDialog.ShowDialog() == DialogResult.OK)

            {

                txtCPath.Text = saveFileDialog.FileName;

            }

        }

//Выполнение операции с составным файлом

        private void btnCombin_Click(object sender, EventArgs e)

        {

            try

            {

                if (txtCFile.Text.Trim() == "" || txtCPath.Text.Trim() == "")

                {

MessageBox.Show("Пожалуйста, введите полную информацию!", "Подсказка", MessageBoxButtons.OK, MessageBoxIcon.Information);

                }

                else

                {

                    if (txtCFile.Text.IndexOf(",") == -1)

MessageBox.Show("Выберите не менее двух файлов для синтеза!", "Подсказка", MessageBoxButtons.OK, MessageBoxIcon.Information);

                    else

                    {

                        string[] strFiles = txtCFile.Text.Split(',');

                        CombinFile(strFiles, txtCPath.Text, progressBar);

                    }

                }

            }

            catch { }

        }

//Контролируем доступный статус кнопки "Объединить"

        private void timer1_Tick(object sender, EventArgs e)

        {

            if (txtCFile.Text != "" && txtCPath.Text != "")

                btnCombin.Enabled = true;

            else

                btnCombin.Enabled = false;

        }

    }

}