(Данная информация взята из msdn, более подробную информацию о пространстве имен System.IO Вы найдете на http://msdn.microsoft.com/ru-r... em.io.aspx )
FAQ для раздела – “C# для начинающих”
Пространство имен - System.IO (Работа с файлами, директориями,дисками,памятью)
Содержание:
1. Диаграмма классов пространства имен System.IO
2. Классы
3. Структуры
4. Делегаты
5. Перечисления
1. Диаграмма класов пространства имен System.IO
Пространство имен System.IO содержит типы, позволяющие осуществлять чтение и запись в файлы и потоки данных, а также типы для базовой поддержки файлов и папок.
Ниже приведено полное описание данного пространства имен, а так же основные примеры работы с ним.
System.IO включает в себя:
2. Классы
•
BinaryReader Считывает простые типы данных как двоичные значения в заданной кодировке.
•
BinaryWriter Записывает простые типы данных в поток как двоичные значения и поддерживает запись строк в определенной кодировке.
•
BufferedStream Обеспечивает дополнительную буферизацию для выполнения операций чтения и записи с другими потоками.Этот класс не может быть унаследован.
•
Directory Предоставляет статические методы для создания, перемещения и перечисления в каталогах и вложенных каталогах.Этот класс не может быть унаследован.
Пример использования:
C# |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
| /*Предоставляет статические методы для создания, перемещения и перечисления в каталогах и вложенных каталогах.Этот класс не может быть унаследован.
Пространство имен: System.IO
Сборка: mscorlib (в mscorlib.dll)
[ComVisibleAttribute(true)]
public static class Directory
*/
using System;
using System.IO;
class Test
{
public static void Main()
{
/* в строковые переменные заносим пути директорий
с которыми будем работать*/
string path = @"c:\MyDir";
string target = @"c:\TestDir";
try
{
//проверяем, существует ли директория "c:\MyDir"
if (!Directory.Exists(path))
{
// если нет, то создаем ее.
Directory.CreateDirectory(path);
}
//проверяем, существует ли директория "c:\TestDir"
if (Directory.Exists(target))
{
// Если да, то удаляем ее
Directory.Delete(target, true);
}
/*
Перемешение директории
public static void Move(
string sourceDirName,
string destDirName
)
sourceDirName
Тип: System.String
Путь к файлу или каталогу, который необходимо переместить.
destDirName
Тип: System.String
Путь к новому местоположению sourceDirName.Если sourceDirName является файлом, то параметр destDirName также должен быть именем файла.
*/
Directory.Move(path, target);
// Создание файла
File.CreateText(target + @"\myfile.txt");
// Выводим количество файлов директории “c:\TestDir”
Console.WriteLine("The number of files in {0} is {1}",
target, Directory.GetFiles(target).Length);
}
catch (Exception e)
{
Console.WriteLine("The process failed: {0}", e.ToString());
}
finally { }
}
} |
|
Как переименовать папку?(от Dzhej-Dzhej)
C# |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| using System;
using System.IO;
namespace Ex
{
class Program
{
static void Main(string[] args)
{
System.IO.Directory.CreateDirectory (@"D:\1");//создали
System.IO.Directory.Move(@"D:\1", @"D:\2");//переименовали
}
}
} |
|
•
DirectoryInfo Предоставляет методы экземпляра класса для создания, перемещения и перечисления в каталогах и подкаталогах.Этот класс не может быть унаследован.
Пример использования:
C# |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
| /*
Предоставляет методы экземпляра класса для создания, перемещения и перечисления в каталогах и подкаталогах.Этот класс не может быть унаследован.
Пространство имен: System.IO
Сборка: mscorlib (в mscorlib.dll)
[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class DirectoryInfo : FileSystemInfo
*/
using System;
using System.IO;
class Test
{
public static void Main()
{
/*передаем конструктору класса DirectoryInfo
имя директории для манипуляций*/
DirectoryInfo di = new DirectoryInfo(@"c:\MyDir");
try
{
// Если директория "c:\MyDir" существует, то
if (di.Exists)
{
Console.WriteLine(@"Директория ‘c:\MyDir’ существует.");
return;
}
// Иначе, создаем ее
di.Create();
Console.WriteLine("Создание директории прошло успешно.");
// Удаляем созданную директорию
di.Delete();
Console.WriteLine("Удаление директории прошло успешно.");
}
catch (Exception e)
{
Console.WriteLine("Ошибка: {0}", e.ToString());
}
finally { }
}
} |
|
C# |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
| using System;
using System.IO;
class CopyDir
{
public static void Copy(string sourceDirectory, string targetDirectory)
{
DirectoryInfo diSource = new DirectoryInfo(sourceDirectory);
DirectoryInfo diTarget = new DirectoryInfo(targetDirectory);
CopyAll(diSource, diTarget);
}
public static void CopyAll(DirectoryInfo source, DirectoryInfo target)
{
// Если директория target.FullName не существует, создать ее
if (Directory.Exists(target.FullName) == false)
{
Directory.CreateDirectory(target.FullName);
}
// Копируем файлы из sourceDirectory в targetDirectory
foreach (FileInfo fi in source.GetFiles())
{
Console.WriteLine(@"Copying {0}\{1}", target.FullName, fi.Name);
fi.CopyTo(Path.Combine(target.ToString(), fi.Name), true);
}
//копируем поддиректории
foreach (DirectoryInfo diSourceSubDir in source.GetDirectories())
{
DirectoryInfo nextTargetSubDir =
target.CreateSubdirectory(diSourceSubDir.Name);
CopyAll(diSourceSubDir, nextTargetSubDir);
}
}
public static void Main()
{
string sourceDirectory = @"c:\sourceDirectory";
string targetDirectory = @"c:\targetDirectory";
Copy(sourceDirectory, targetDirectory);
}
} |
|
•
DirectoryNotFoundException Исключение, возникающее при невозможности найти часть файла или каталога.
•
DriveInfo Предоставляет доступ к сведениям на диске.
Пример использования:
C# |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
| /*
Предоставляет доступ к сведениям на диске.
Пространство имен: System.IO
Сборка: mscorlib (в mscorlib.dll)
[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class DriveInfo : ISerializable
*/
using System;
using System.IO;
class Test
{
public static void Main()
{
DriveInfo[] allDrives = DriveInfo.GetDrives();
foreach (DriveInfo d in allDrives)
{
Console.WriteLine("Drive {0}", d.Name);
Console.WriteLine(" File type: {0}", d.DriveType);
if (d.IsReady == true)
{
Console.WriteLine(" Volume label: {0}", d.VolumeLabel);
Console.WriteLine(" File system: {0}", d.DriveFormat);
Console.WriteLine(
" Available space to current user:{0, 15} bytes",
d.AvailableFreeSpace);
Console.WriteLine(
" Total available space: {0, 15} bytes",
d.TotalFreeSpace);
Console.WriteLine(
" Total size of drive: {0, 15} bytes ",
d.TotalSize);
}
}
}
}
/*
Пример работы приложения:
Drive A:\
File type: Removable
Drive C:\
File type: Fixed
Volume label:
File system: FAT32
Available space to current user: 4770430976 bytes
Total available space: 4770430976 bytes
Total size of drive: 10731683840 bytes
Drive D:\
File type: Fixed
Volume label:
File system: NTFS
Available space to current user: 15114977280 bytes
Total available space: 15114977280 bytes
Total size of drive: 25958948864 bytes
Drive E:\
File type: CDRom
*/ |
|
•
DriveNotFoundException Исключение вызывается при попытке доступа к недоступному диску или данным совместного использования.
•
EndOfStreamException Исключение, которое создается при попытке выполнить чтение за пределами потока.
•
ErrorEventArgs Предоставление данных для события Error.
•
File Предоставляет статические методы для создания, копирования, удаления, перемещения и открытия файлов, а также помогает при создании объектов FileStream.
Пример использования:
C# |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
| /*
Предоставляет статические методы для создания, копирования, удаления, перемещения и открытия файлов, а также помогает при создании объектов FileStream.
Пространство имен: System.IO
Сборка: mscorlib (в mscorlib.dll)
[ComVisibleAttribute(true)]
public static class File
*/
using System;
using System.IO;
class Test
{
public static void Main()
{
string path = @"c:\temp\MyTest.txt";
if (!File.Exists(path))
{
// Создание файла и запись в него
using (StreamWriter sw = File.CreateText(path))
{
sw.WriteLine("Hello");
sw.WriteLine("And");
sw.WriteLine("Welcome");
}
}
// Открываем файл для чтения и читаем из него все строки, построчно
using (StreamReader sr = File.OpenText(path))
{
string s = "";
while ((s = sr.ReadLine()) != null)
{
Console.WriteLine(s);
}
}
}
} |
|
•
FileFormatException Исключение, которое вызывается, если входной файл или поток данных, который должен соответствовать определенной спецификации формата файла, сформирован неверно.
•
FileInfo Предоставляет методы экземпляра для создания, копирования, удаления, перемещения и открытия файлов, а также позволяет создавать объекты FileStream.Этот класс не может быть унаследован.
Пример использования:
C# |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
| /*
Предоставляет методы экземпляра для создания, копирования, удаления, перемещения и открытия файлов, а также позволяет создавать объекты FileStream.Этот класс не может быть унаследован.
Пространство имен: System.IO
Сборка: mscorlib (в mscorlib.dll)
[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class FileInfo : FileSystemInfo
*/
using System;
using System.IO;
class Test
{
public static void Main()
{
string path = Path.GetTempFileName();
FileInfo fi1 = new FileInfo(path);
if (!fi1.Exists)
{
// Создание файла и запись в него
using (StreamWriter sw = fi1.CreateText())
{
sw.WriteLine("Hello");
sw.WriteLine("And");
sw.WriteLine("Welcome");
}
}
// Открываем файл для чтения и читаем из него все строки, построчно
using (StreamReader sr = fi1.OpenText())
{
string s = "";
while ((s = sr.ReadLine()) != null)
{
Console.WriteLine(s);
}
}
try
{
string path2 = Path.GetTempFileName();
FileInfo fi2 = new FileInfo(path2);
//Удаляем файл
fi2.Delete();
//Копируем файл
fi1.CopyTo(path2);
Console.WriteLine("{0} копируем в {1}.", path, path2);
//Удаляем, только что скопированный файл
fi2.Delete();
Console.WriteLine("{0} удален успешно.", path2);
}
catch (Exception e)
{
Console.WriteLine("Ошибка: {0}", e.ToString());
}
}
} |
|
•
FileLoadException Это исключение создается в случае, когда управляемая сборка найдена, но не может быть загружена.
•
FileNotFoundException Это исключение создается, когда попытка доступа к файлу, не существующему на диске, заканчивается неудачей.
•
FileStream Предоставляет Stream в файле, поддерживая синхронные и асинхронные операции чтения и записи.
•
FileSystemEventArgs Предоставляет данные для событий каталога: Changed, Created, Deleted.
•
FileSystemInfo Обеспечивает базовый класс для объектов FileInfo и DirectoryInfo.
•
FileSystemWatcher Ожидает уведомления файловой системы об изменениях и инициирует события при изменениях каталога или файла в каталоге.
• InternalBufferOverflowException Исключение, создаваемое при переполнении внутреннего буфера.
•
InvalidDataException Исключение возникает, когда поток данных имеет недопустимый формат.
•
IODescriptionAttribute Задает для визуальных конструкторов описания возможность отображения при обращении к событию, средству расширения или свойству.
•
IOException Исключение, создаваемое при возникновении ошибки ввода-вывода.
•
Path Выполняет операции для экземпляров класса String, содержащих сведения пути к файлу или каталогу.Эти операции выполняются межплатформенным способом.
•
PathTooLongException Исключение, создаваемое, когда путь или имя файла превышает максимальную длину, определенную системой.
•
PipeException Создается при ошибке в именованном канале.
•
RenamedEventArgs Предоставляет данные для события Renamed.
•
Stream Предоставляет универсальное представление последовательности байтов.
•
StreamReader Реализует TextReader, который считывает символы из потока байтов в определенной кодировке.
Пример использования:
C# |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
| /*
Реализует TextReader, который считывает символы из потока байтов в определенной кодировке.
Пространство имен: System.IO
Сборка: mscorlib (в mscorlib.dll)
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class StreamReader : TextReader
*/
using System;
using System.IO;
class Test
{
public static void Main()
{
try
{
/* Создание объекта типа StreamReader для чтения файла.
Конструкция using(…){}, закрывает файл при выходи за
Операторские скобки {}*/
using (StreamReader sr = new StreamReader("TestFile.txt"))
{
string line;
// читаем файл построчно (один из способов)
// к примеру можно прочесть файл сразу - полностью
while ((line = sr.ReadLine()) != null)
{
Console.WriteLine(line);
}
}
}
catch (Exception e)
{
// В случае ошибки
Console.WriteLine("Файл не может быть прочитан:");
Console.WriteLine(e.Message);
}
}
} |
|
•
StreamWriter Реализует TextWriter для записи символов в поток в определенной кодировке.
Пример использования:
C# |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
| /*
Реализует TextWriter для записи символов в поток в определенной кодировке.
Пространство имен: System.IO
Сборка: mscorlib (в mscorlib.dll)
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class StreamWriter : TextWriter
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace StreamReadWrite
{
class Program
{
static void Main(string[] args)
{
// Получаем список директорий диска “C:\”
DirectoryInfo[] cDirs = new DirectoryInfo(@"c:\").GetDirectories();
// Записываем полученный список в файл
using (StreamWriter sw = new StreamWriter("CDriveDirs.txt"))
{
foreach (DirectoryInfo dir in cDirs)
{
sw.WriteLine(dir.Name);
}
}
// Читаем записанные данные
string line = "";
using (StreamReader sr = new StreamReader("CDriveDirs.txt"))
{
while ((line = sr.ReadLine()) != null)
{
Console.WriteLine(line);
}
}
}
}
} |
|
•
MemoryStream Создает поток, резервным хранилищем которого является память.
Пример использования:
C# |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
| /*
Создает поток, резервным хранилищем которого является память.
Пространство имен: System.IO
Сборка: mscorlib (в mscorlib.dll)
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class MemoryStream : Stream
*/
using System;
using System.IO;
using System.Text;
class MemStream
{
static void Main()
{
int count;
byte[] byteArray;
char[] charArray;
UnicodeEncoding uniEncoding = new UnicodeEncoding();
// Создание данных для записи в поток.
byte[] firstString = uniEncoding.GetBytes(
"Invalid file path characters are: ");
byte[] secondString = uniEncoding.GetBytes(
Path.GetInvalidPathChars());
using (MemoryStream memStream = new MemoryStream(100))
{
// Запись первой строки в поток.
memStream.Write(firstString, 0, firstString.Length);
// Запись второй строки в поток побайтно.
count = 0;
while (count < secondString.Length)
{
memStream.WriteByte(secondString[count++]);
}
// Вывод параметров потока в консоль.
Console.WriteLine(
"Capacity = {0}, Length = {1}, Position = {2}\n",
memStream.Capacity.ToString(),
memStream.Length.ToString(),
memStream.Position.ToString());
// Установка на начальную позицию в потоке.
memStream.Seek(0, SeekOrigin.Begin);
// Читаем первые 20 байт
byteArray = new byte[memStream.Length];
count = memStream.Read(byteArray, 0, 20);
// Читаем оставшиеся данные побайтно до конца.
while (count < memStream.Length)
{
byteArray[count++] =
Convert.ToByte(memStream.ReadByte());
}
// Конвертируем массив байт в массив символов
// и выводим в консоль
charArray = new char[uniEncoding.GetCharCount(
byteArray, 0, count)];
uniEncoding.GetDecoder().GetChars(
byteArray, 0, count, charArray, 0);
Console.WriteLine(charArray);
}
}
} |
|
•
StringReader Реализует класс TextReader, осуществляющий чтение из строки.
Пример использования:
C# |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
| /*
Реализует класс TextReader, осуществляющий чтение из строки.
Пространство имен: System.IO
Сборка: mscorlib (в mscorlib.dll)
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class StringReader : TextReader
*/
using System;
using System.IO;
class StringRW
{
static void Main()
{
//строковая переменная для обработки посредством инструментов класса
// StringReader
string textReaderText = "TextReader is the abstract base " +
"class of StreamReader and StringReader, which read " +
"characters from streams and strings, respectively.\n\n" +
"Create an instance of TextReader to open a text file " +
"for reading a specified range of characters, or to " +
"create a reader based on an existing stream.\n\n" +
"You can also use an instance of TextReader to read " +
"text from a custom backing store using the same " +
"APIs you would use for a string or a stream.\n\n";
Console.WriteLine("Original text:\n\n{0}", textReaderText);
/*создаем две строковые переменные
В первую будем записывать текушую строку,
Во второй будем формировать результат*/
string aLine, aParagraph = null;
StringReader strReader = new StringReader(textReaderText);
while (true)
{
aLine = strReader.ReadLine();
if (aLine != null)
{
aParagraph = aParagraph + aLine + " ";
}
else
{
aParagraph = aParagraph + "\n";
break;
}
}
Console.WriteLine("Измененый текст:\n\n{0}", aParagraph);
// Выводим и записываем измененый текст
int intCharacter;
char convertedCharacter;
StringWriter strWriter = new StringWriter();
strReader = new StringReader(aParagraph);
while (true)
{
intCharacter = strReader.Read();
// пока не конец строки
// конвертируем intCharacter в символ.
if (intCharacter == -1) break;
convertedCharacter = Convert.ToChar(intCharacter);
if (convertedCharacter == '.')
{
strWriter.Write(".\n\n");
// Пропускаем места между предложениями.
strReader.Read();
strReader.Read();
}
else
{
strWriter.Write(convertedCharacter);
}
}
Console.WriteLine("\nОригинальный текст:\n\n{0}",
strWriter.ToString());
}
} |
|
•
StringWriter Реализует TextWriter для записи данных в строку.Данные хранятся в основном StringBuilder.
Пример использования:
C# |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
| /*
Реализует TextWriter для записи данных в строку.Данные хранятся в основном StringBuilder.
Пространство имен: System.IO
Сборка: mscorlib (в mscorlib.dll)
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class StringWriter : TextWriter
*/
using System;
using System.IO;
class StringRW
{
static void Main()
{
//строковая переменная для обработки посредством инструментов класса
// StringReader
string textReaderText = "TextReader is the abstract base " +
"class of StreamReader and StringReader, which read " +
"characters from streams and strings, respectively.\n\n" +
"Create an instance of TextReader to open a text file " +
"for reading a specified range of characters, or to " +
"create a reader based on an existing stream.\n\n" +
"You can also use an instance of TextReader to read " +
"text from a custom backing store using the same " +
"APIs you would use for a string or a stream.\n\n";
Console.WriteLine("Original text:\n\n{0}", textReaderText);
/*создаем две строковые переменные
В первую будем записывать текушую строку,
Во второй будем формировать результат*/
string aLine, aParagraph = null;
StringReader strReader = new StringReader(textReaderText);
while (true)
{
aLine = strReader.ReadLine();
if (aLine != null)
{
aParagraph = aParagraph + aLine + " ";
}
else
{
aParagraph = aParagraph + "\n";
break;
}
}
Console.WriteLine("Измененый текст:\n\n{0}", aParagraph);
// Выводим и записываем измененый текст
int intCharacter;
char convertedCharacter;
StringWriter strWriter = new StringWriter();
strReader = new StringReader(aParagraph);
while (true)
{
intCharacter = strReader.Read();
// пока не конец строки
// конвертируем intCharacter в символ.
if (intCharacter == -1) break;
convertedCharacter = Convert.ToChar(intCharacter);
if (convertedCharacter == '.')
{
strWriter.Write(".\n\n");
// Пропускаем места между предложениями.
strReader.Read();
strReader.Read();
}
else
{
strWriter.Write(convertedCharacter);
}
}
Console.WriteLine("\nОригинальный текст:\n\n{0}",
strWriter.ToString());
} |
|
•
TextReader Представляет средство чтения, позволяющее считывать последовательные наборы знаков.
•
TextWriter Представляет средство записи, позволяющее записывать последовательные наборы символов.Это абстрактный класс.
•
UnmanagedMemoryAccessor Предоставляет произвольный доступ к неуправляемым блокам памяти из управляемого кода.
•
UnmanagedMemoryStream Предоставляет доступ к неуправляемым блокам памяти из управляемого кода.
3. Структуры
•
WaitForChangedResult Содержит сведения о произошедшем изменении.
4. Делегаты
•
ErrorEventHandler Предоставляет метод, обрабатывающий событие Error объекта FileSystemWatcher.
•
FileSystemEventHandler Представляет метод, обрабатывающий события Changed, Created или Deleted класса FileSystemWatcher.
•
RenamedEventHandler Представляет метод, обрабатывающий событие Renamed класса FileSystemWatcher.
5. Перечисления
•
DriveType Определяет постоянные величины для типов дисков, включая CDRom, Fixed, Network, NoRootDirectory, Ram, Removable и Unknown.
•
FileAccess Определяет константы чтения, записи или чтения и записи файла.
•
FileAttributes Предоставляет атрибуты для файлов и папок.
•
FileMode Описывает, каким образом операционная система должна открывать файл.
•
FileOptions Представляет дополнительные параметры для создания объекта FileStream.
•
FileShare Содержит константы, позволяющие управлять типом доступа, который другие объекты FileStream могут осуществлять к тому же файлу.
•
HandleInheritability Указывает, является ли основной дескриптор наследуемым дочерними процессами.
•
NotifyFilters Задает изменения, наблюдаемые в файле или папке.
•
SearchOption Указывает, следует ли выполнять поиск в текущем каталоге или в текущем каталоге и всех подкаталогах.
•
SeekOrigin Предоставляет поля, представляющие точки ссылки для поиска в потоках.
•
WatcherChangeTypes Возможные изменения в файле или каталоге.
В заключении хочу привести пример по программному отслеживанию файлов. Данный пример, с некоторыми изменениями рассматривается в книге -
Троелсена. Язык программирования С# 2008 и платформа .NET 3.5.
C# |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
| /*
Ожидает уведомления файловой системы об изменениях и инициирует события при изменениях каталога или файла в каталоге.
Пространство имен: System.IO
Сборка: System (в System.dll)
[IODescriptionAttribute("FileSystemWatcherDesc")]
[PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")]
[PermissionSetAttribute(SecurityAction.InheritanceDemand, Name = "FullTrust")]
public class FileSystemWatcher : Component,
ISupportInitialize
*/
using System;
using System.IO;
class Test
{
public static void Main()
{
FileSystemWatcher watcher = new FileSystemWatcher();
try
{
//дирректория для отслеживания
watcher.Path = @"C:\Downloads";
}
catch (ArgumentException e)
{
Console.WriteLine(e.Message);
return;
}
//какие изменения отслеживать
watcher.NotifyFilter = NotifyFilters.LastAccess
| NotifyFilters.LastWrite
| NotifyFilters.CreationTime
| NotifyFilters.DirectoryName
| NotifyFilters.FileName;
watcher.Filter = "*.*"; /* какие типы файлов (в данном случае все, для отслеживания только txt - watcher.Filter = "*.txt";) */
watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.Created += new FileSystemEventHandler(OnChanged);
watcher.Deleted += new FileSystemEventHandler(OnChanged);
watcher.Renamed += new RenamedEventHandler(watcher_Renamed);
//начинаем отслеживание
watcher.EnableRaisingEvents = true;
while (Console.Read() != 'q') ;
Console.ReadLine();
}
static void watcher_Renamed(object sender, RenamedEventArgs e)
{
Console.WriteLine("File:{0} {1}", e.OldFullPath, e.FullPath);
}
static void OnChanged(object sender, FileSystemEventArgs e)
{
Console.WriteLine("File:{0} {1}", e.FullPath, e.ChangeType);
}
} |
|
Пример от Microsift
C# |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
| public class Watcher
{
public static void Main()
{
Run();
}
[PermissionSet(SecurityAction.Demand, Name="FullTrust")]
public static void Run()
{
string[] args = System.Environment.GetCommandLineArgs();
// If a directory is not specified, exit program.
if(args.Length != 2)
{
// Display the proper way to call the program.
Console.WriteLine("Usage: Watcher.exe (directory)");
return;
}
// Create a new FileSystemWatcher and set its properties.
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = args[1];
/* Watch for changes in LastAccess and LastWrite times, and
the renaming of files or directories. */
watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
| NotifyFilters.FileName | NotifyFilters.DirectoryName;
// Only watch text files.
watcher.Filter = "*.txt";
// Add event handlers.
watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.Created += new FileSystemEventHandler(OnChanged);
watcher.Deleted += new FileSystemEventHandler(OnChanged);
watcher.Renamed += new RenamedEventHandler(OnRenamed);
// Begin watching.
watcher.EnableRaisingEvents = true;
// Wait for the user to quit the program.
Console.WriteLine("Press \'q\' to quit the sample.");
while(Console.Read()!='q');
}
// Define the event handlers.
private static void OnChanged(object source, FileSystemEventArgs e)
{
// Specify what is done when a file is changed, created, or deleted.
Console.WriteLine("File: " + e.FullPath + " " + e.ChangeType);
}
private static void OnRenamed(object source, RenamedEventArgs e)
{
// Specify what is done when a file is renamed.
Console.WriteLine("File: {0} renamed to {1}", e.OldFullPath, e.FullPath);
}
} |
|
Так же, данный FAQ в Word
FAQ для раздела.rar