Работа с директориями в С#
Для изучения данного вопроса будем использовать проект
решения предыдущего параграфа, как обычно, убрав коды обработчиков
событий нажатия кнопок 1 и 2. Все примеры этого параграфа можно
помещать в обработчике нажатия этих кнопок.
В начало
Класc Directory и его использвание
Класс Directory содержит набор статических методов, которые могут
быть использованы для создания, копирования, перемещения, удаления и
получения свойств папок.
Рассмотрим основные методы класса:
DirectoryInfo CreateDirectory(string path); -
cоздает директорию (поддиректорию), определенный path.
DirectoryInfo directoryinfo = Directory.CreateDirectory(path);
Возможные исключения:
- IOException - директория, указанная в path не существует.
- UnauthorizedAccessException - у пользователя нет права на
создание.
- ArgumentException - путь является строкой нулевой длина,
содержит только пробелы или содержит недопустимые символы, определенные в
InvalidPathChars.
- ArgumentNullException - путь является нулевой ссылкой.
- PathTooLongException - путь превышает определенную системой
максимальную длину.
- DirectoryNotFoundException - указанный путь не существует.
- NotSupportedException - попытка создания директории только с символом ":".
Delete(string path); Delete(string path,bool recursive); -
удаляет директорию, определенную path, и ее содержание. Если в методе
присутствует параметр recursive=false, то не пустая директория не удаляется.
Например, если у нас имеется директория A, а в ней аоддиректория B,
то следующий код выведет в контрол TextBox
System.IO.IOException: Папка не пуста.:
private void button1_Click(object sender, System.EventArgs e)
{
string path = @"c:\A";
try
{
Directory.Delete(path,false);
}
catch(IOException ex)
{
textBox1.Text=ex.ToString();
}
catch
{
textBox1.Text="Другие прерывания";
}
}
Возможные исключения:
- IOException - директория, указанная в path не существует.
- UnauthorizedAccessException - у пользователя нет права на
удаление.
- ArgumentException - путь является строкой нулевой длина,
содержит только пробелы или содержит недопустимые символы, определенные в
InvalidPathChars.
- ArgumentNullException - путь является нулевой ссылкой.
- PathTooLongException - путь превышает определенную системой
максимальную длину.
- DirectoryNotFoundException - указанный путь не существует.
bool Exists(string path); - проверяет существование пути к
файлу на диске. Метод возвращает false при отсутствии пути и true при
его наличии.
string path = @"c:\A";
if(Directory.Exists(path))
{
Directory.Delete(path);
}
DateTime GetCreationTime(string path); GetCreationTimeUtc(string path);
- считывает дату и время создания директории, время соответственно для текущей зоны и
UTC (Universal Time Coordinated) - значение всемирного скоординированного времени.
string path = @"C:\WINNT";
DateTime datetime = Directory.GetCreationTime(path);
textBox1.Text=datetime.ToString()+Environment.NewLine;
datetime = Directory.GetCreationTimeUtc(path);
textBox1.Text+=datetime.ToString();
Результат выполнения кода:
06.05.2004 16:06:41
06.05.2004 12:06:41
Возможные исключения:
- IOException - директория, указанная в path не существует.
- UnauthorizedAccessException - у пользователя нет права на
операцию с директорией.
- ArgumentException - путь является строкой нулевой длина,
содержит только пробелы или содержит недопустимые символы, определенные в
InvalidPathChars.
- ArgumentNullException - путь является нулевой ссылкой.
- PathTooLongException - путь превышает определенную системой
максимальную длину.
- NotSupportedException - параметр пути находится в недопустимом формате.
string GetCurrentDirectory(); - возвращает текущую директорию
к исполняемому файлу.
textBox1.Text=Directory.GetCurrentDirectory();
//Результат
C:\SamplesC#\Panels\bin\Debug
string[] GetDirectories(string path); string[] GetDirectories(string path,string pattern);
- возвращает имена поддиректорий в указанной директории, отвечающие строке
образцу pattern.
private void button1_Click(object sender, System.EventArgs e)
{
string path = @"C:\WINNT";
string[] directories = Directory.GetDirectories(path,"C*");
foreach (string directory in directories)
{
textBox1.Text+=directory+Environment.NewLine;
}
}
Результат:
C:\WINNT\Config
C:\WINNT\Connection Wizard
C:\WINNT\CSC
C:\WINNT\Cursors
Возможные исключения:
- IOException - path есть имя файла.
- UnauthorizedAccessException - у пользователя нет соответствующего права.
- ArgumentException - путь является строкой нулевой длина,
содержит только пробелы или содержит недопустимые символы, определенные в
InvalidPathChars или pattern не содержит допустимый образец.
- ArgumentNullException - путь является нулевой ссылкой.
- PathTooLongException - путь превышает определенную системой
максимальную длину.
- DirectoryNotFoundException - указанный путь не существует.
string GetDirectoryRoot(string path); - возвращает
имя корневой директории для указанного пути.
Возможные исключения:
- UnauthorizedAccessException - у пользователя нет права на
доступ к данной директории.
- ArgumentException - путь является строкой нулевой длина,
содержит только пробелы или содержит недопустимые символы, определенные в
InvalidPathChars.
- ArgumentNullException - путь является нулевой ссылкой.
- PathTooLongException - путь превышает определенную системой
максимальную длину.
string[] GetFiles(string path,string pattern); -
возвращает имена файлов в указанной директории и соответствующих
образцу pattern.
Следующий код выведет все файлы с расширением .exe директории
Windows:
private void button1_Click(object sender, System.EventArgs e)
{
string path = @"C:\WINNT";
string[] fales = Directory.GetFiles(path,"*.exe");
foreach (string fale in fales)
{
textBox1.Text+=fale+Environment.NewLine;
}
}
Возможные исключения:
- UnauthorizedAccessException - у пользователя нет соответствующего права.
- ArgumentException - путь является строкой нулевой длина,
содержит только пробелы или содержит недопустимые символы, определенные в
InvalidPathChars или pattern не содержит допустимый образец.
- ArgumentNullException - путь является нулевой ссылкой.
- PathTooLongException - путь превышает определенную системой
максимальную длину.
- DirectoryNotFoundException - указанный путь не существует.
GetFileSystemEntries(string path);
GetFileSystemEntries(string path,string pattern); - возвращает
имена всех файлов и поддиректорий в указанной директории, и отвечающие
образцу pattern. Пример и возможные исключения аналогичны методу GetFiles.
DateTime GetLastAccessTime(string path); GetLastAccessTimeUtc(string path); - возвращает дату
и время последнего обращенитя к файлу или директории, время соответственно для текущей
зоны и UTC (Universal Time Coordinated) - значение всемирного скоординированного
времени (аналогичный пример использования см. метод GetCreationTime).
Возможные исключения:
- IOException - директория, указанная в path не существует.
- UnauthorizedAccessException - у пользователя нет права на
операцию с директорией.
- ArgumentException - путь является строкой нулевой длина,
содержит только пробелы или содержит недопустимые символы, определенные в
InvalidPathChars.
- ArgumentNullException - путь является нулевой ссылкой.
- PathTooLongException - путь превышает определенную системой
максимальную длину.
- NotSupportedException - параметр пути находится в недопустимом формате.
DateTime GetLastWriteTime(string path); DateTime GetLastWriteTimeUtc(string path);
- возвращает дату и время последней записи в файл или директорию, время соответственно для текущей
зоны и UTC (Universal Time Coordinated) - значение всемирного скоординированного
времени (аналогичный пример использования см. метод GetCreationTime).
string[] GetLogicalDrives(); - возвращает имена логических
дисков на данном компьютере.
string[] drivers = Directory.GetLogicalDrives();
foreach (string drive in drivers)
{
textBox1.Text+=drive+Environment.NewLine;
}
Результат:
A:\
C:\
D:\
E:\
K:\
L:\
S:\
Z:\
DirectoryInfo GetParent(path); - отыскивает
родительскую директорию указанного пути, включая абсолютные
и относительные пути.
string path = @"C:\A\B\C";
DirectoryInfo directoryinfo = Directory.GetParent(path);
textBox1.Text+=directoryinfo.ToString()+Environment.NewLine;
path = @"C:\A\B";
directoryinfo = Directory.GetParent(path);
textBox1.Text+=directoryinfo.ToString()+Environment.NewLine;
path = @"C:\A";
directoryinfo = Directory.GetParent(path);
textBox1.Text+=directoryinfo.ToString()+Environment.NewLine;
Результат:
C:\A\B
C:\A
C:\
Возможные исключения:
- IOException - директория, указанная в path только для чтения.
- UnauthorizedAccessException - у пользователя нет права на
операцию.
- ArgumentException - путь является строкой нулевой длина,
содержит только пробелы или содержит недопустимые символы, определенные в
InvalidPathChars.
- ArgumentNullException - путь является нулевой ссылкой.
- PathTooLongException - путь превышает определенную системой
максимальную длину.
- DirectoryNotFoundException - указанный путь не существует.
Move(string sourceDirName, string destDirName); - перемещает
файл или директорию sourceDirName и его содержание к новому
местоположению string destDirName.
string path = @"C:\A\B";
string path1 = @"C:\B";
Directory.Move(path,path1);
Возможные исключения:
- IOException - при попытке перемещения директории на
другой диск, или в существующую директорию, или если sourceDirName и
destDirName есть одна и таже директория.
- UnauthorizedAccessException - у пользователя нет права на
операцию.
- ArgumentException - один из путей является строкой нулевой длина,
содержит только пробелы или содержит недопустимые символы, определенные в
InvalidPathChars.
- ArgumentNullException - один из путей является нулевой ссылкой.
- PathTooLongException - один из путей является превышает определенную системой
максимальную длину.
- DirectoryNotFoundException - один из путей не существует.
SetCreationTime(string path, DateTime creationTime); SetCreationTimeUtc(string path, DateTime creationTime);
устанавливает дату и время создания для указанного файла или директории,
время соответственно для текущей зоны и UTC (Universal Time
Coordinated) - значение всемирного скоординированного времени.
Рассмотрим пример "постарения файла":
private void button1_Click(object sender, System.EventArgs e)
{
string path = @"C:\a.txt";
CultureInfo cultureinfo = new CultureInfo("ru-RU");
DateTime datetime=Convert.ToDateTime("1/01/2004 18:00",cultureinfo);
Directory.SetCreationTime(path,datetime);
datetime = Directory.GetCreationTime(path);
textBox1.Text="Дата создания файла: "+ datetime.ToString()+Environment.NewLine;
Результат:
Дата создания файла: 01.01.2004 18:00:00
Возможные исключения:
- FileNotFoundException - указанный путь не был найден.
- ArgumentException - путь является строкой нулевой длина,
содержит только пробелы или содержит недопустимые символы, определенные в
InvalidPathChars.
- ArgumentNullException - путь является нулевой ссылкой.
- PathTooLongException - путь превышает определенную системой
максимальную длину.
- UnauthorizedAccessException - у пользователя нет права на
операцию.
- ArgumentOutOfRangeException - время создания определяет значение
вне диапазона дат или времен, разрешенных для этой операции.
SetLastAccessTime(string path,DateTime accesTime);
SetLastAccessTimeUtc(string path, DateTime accesTime); -
устанавливает дату и время последнего обращенитя к файлу или директории,
время соответственно для текущей зоны и UTC (Universal Time Coordinated)
- значение всемирного скоординированного
времени.
Возможные исключения и пример аналогичны методу SetCreationTime.
SetLastWriteTime(string path,DateTime writeTime);
SetLastWriteTimeUtc(string path, DateTime writeTime); -
устанавливает дату и время последней записи в файл или директорию,
время соответственно для текущей зоны и UTC (Universal Time Coordinated)
- значение всемирного скоординированного
времени.
Возможные исключения и пример аналогичны методу SetCreationTime.
SetCurrentDirectory(string path); - устанавливает
текущую рабочую директорию приложения в указанную переменной path.
Возможные исключения:
- IOException - при ошибках ввода вывода.
- ArgumentException - путь является строкой нулевой длина,
содержит только пробелы или содержит недопустимые символы, определенные в
InvalidPathChars.
- ArgumentNullException - путь является нулевой ссылкой.
- PathTooLongException - путь превышает определенную системой
максимальную длину.
- SecurityException - у пользователя нет прав обращения к данной директории.
- FileNotFoundException - указанный путь не существует.
В начало
В начало
Класc DirectoryInfo и его использвание
Класс DirectoryInfo позволяет создавать и перемещать директории,
а также получать содержимое и свойства директорий и поддиректорий.
Многие методы класса DirectoryInfo аналогичны методам
класса Directory. Однако класс DirectoryInfo - потомок абстрактного
класса FileSystemInfo содержат не статические методы для выполнения
операций с папками и файлами. Для его использования
требуется создать экземпляр класса. Отметим также, что
класс DirectoryInfo являются "запечатанным" классом (sealed classes)
- мы можем создавать экземпляры класса, но наследовать от него
нельзя.
Отметим, что ряд методов класса Directory возвращают
объект DirectoryInfo (CreateDirectory, GetParent), которым
можно пользоваться для проверки параметров директорий.
Конструктор класса имеет только один параметр - путь к директории:
public DirectoryInfo(string path);
Возможные исключения при создании класса:
- ArgumentNullException - путь есть нулевая ссылка.
- SecurityException - вызывающий не имеет требуемого разрешения.
- ArgumentException путь содержит недопустимые символы
типа ", <,>, или |.
- PathTooLongException - указанный путь, имя файла, или оба
превышают определенную системой максимальную длину.
Рассмотрим основные свойства и методы класса:
В начало
Свойства DirectoryInfo
Attributes - подробно об атрибутах для файлов, их
установке и удалении мы говорили в параграфе "Работа с файлами".
Для директорий работа с атрибутами аналогична, за исключением того,
что всегда присутствует атрибут Directory.
private void button1_Click(object sender, System.EventArgs e)
{
string path = @"C:\A";
//Создаем экземпляр класса DirectoryInfo
DirectoryInfo directoryinfo = new DirectoryInfo(path);
//Его атрибуты
textBox1.Text+=directoryinfo.Attributes.ToString()+Environment.NewLine;
//Добавляем аттрибуты
directoryinfo.Attributes=directoryinfo.Attributes | FileAttributes.ReadOnly | FileAttributes.Hidden;
textBox1.Text+=directoryinfo.Attributes.ToString()+Environment.NewLine;
//Оставляем только аттрибут Hidden
directoryinfo.Attributes=directoryinfo.Attributes & FileAttributes.Hidden;
//Аттрибут Directory остался
textBox1.Text+=directoryinfo.Attributes.ToString()+Environment.NewLine;
}
Результат:
Directory
ReadOnly, Hidden, Directory
Hidden, Directory
Возможные исключения:
- FileNotFoundException указанный файл не существует.
- DirectoryNotFoundException указанный путь недопустим.
- SecurityException вызывающий не имеет требуемого разрешения.
- ArgumentException вызывающий пытается устанавливать недопустимый
признак файла.
- IOException - нет возможности инициализировать данные.
CreateonTime, CreateonTimeUtc, LastAccessTime, LastAccessTimeUtc,
LastWriteTime, LastWriteTimeUtc -
- свойства хранят дату и время создания, последнего обращенитя к данным директории или
директории и дату и время последней записи в директорию соответственно, время для текущей
зоны и UTC (Universal Time Coordinated) - значение всемирного скоординированного
времени (аналогичный пример использования см. метод GetCreationTime).
string path = @"C:\A";
DirectoryInfo directoryinfo = new DirectoryInfo(path);
textBox1.Text+=directoryinfo.LastAccessTime.ToString()+Environment.NewLine;
textBox1.Text+=directoryinfo.LastAccessTimeUtc.ToString();
Результат:
18.10.2004 16:43:25
18.10.2004 12:43:25
Возможные исключения:
- IOException - не возможно получить данные.
- DirectoryNotFoundException - указанный путь недопустим.
- FileNotFoundException указанный файл или директория не существует.
Exists - свойство содержит true если директория на
диске существует.
Extension - свойство хранящее последние символы после
точки в имени директории. Если создать на диске C две директории
"A.B" и "A.B.C", то следующий код:
string path = @"C:\A.B";
DirectoryInfo directoryinfo = new DirectoryInfo(path);
if(directoryinfo.Exists)
textBox1.Text+=directoryinfo.Extension+Environment.NewLine;
path = @"C:\A.B.C";
directoryinfo = new DirectoryInfo(path);
if(directoryinfo.Exists)
textBox1.Text+=directoryinfo.Extension;
выдет:
.B
.C
FullName - свойство хранит полный путь директории
или файла.
Возможные исключения:
- SecurityException - вызывающий не имеет требуемого разрешения.
Name - свойство хранит имя директории или файла.
Пусть у нас имеется дерево C:\A, C:\A\B, C:\A,B,C, C:\A,B,C,D,
тогда выполнение фрагмента кода
string path = @"C:\A\B\C\D";
DirectoryInfo directoryinfo = new DirectoryInfo(path);
textBox1.Text+=directoryinfo.FullName+Environment.NewLine;
textBox1.Text+=directoryinfo.Name+Environment.NewLine;
выведет в TextBox:
C:\A\B\C\D
D
Parent - возвращает родительскую директорию для данной
директории. Это свойство имеет тип DirectoryInfo;
Для созданного дерева директорий A,B,C,D
выполним следующий код, который выведет в TextBox "C":
string path = @"C:\A\B\C\D";
DirectoryInfo directoryinfo = new DirectoryInfo(path);
DirectoryInfo parents = directoryinfo.Parent;
textBox1.Text+=parents.Name;
Возможные исключения:
- SecurityException - вызывающий не имеет требуемого разрешения.
Root - свойство хранит имя корневой директории для данного
маршрута как тип DirectoryInfo. Для предыдущего примера с деревом
вывод в TextBox будет "C:\"
string path = @"C:\A\B\C\D";
DirectoryInfo directoryinfo = new DirectoryInfo(path);
DirectoryInfo roots = directoryinfo.Root;
textBox1.Text+=roots.Name;
Возможные исключения:
- SecurityException - вызывающий не имеет требуемого разрешения.
В начало
Методы DirectoryInfo
void Create(); - создает директорию.
В приведенном примере создается директория E
и при первом нажатии кнопки 1 будет выведен текст -
"Директория создана", при повторном "Директория уже существует",
а если задать несуществующий логический диск, то будет выведена
информация о прерывании.
private void button1_Click(object sender, System.EventArgs e)
{
string path = @"C:\J";
DirectoryInfo directoryinfo = new DirectoryInfo(path);
try
{
if(directoryinfo.Exists)
{
textBox1.Text+="Директория уже существует";
return;
}
directoryinfo.Create();
textBox1.Text+="Директория создана";
}
catch(IOException ex)
{
textBox1.Text+=ex.ToString();
}
}
Возможные исключения:
- IOException директория не может быть создан.
void Delete(); void Delete(bool recursive); - удаляет класс DirectoryInfo и директорию
по заданному при его создании пути в случае если директория пуста или
параметр recursive=true.
В следующем примере директория А будет удалена если папка A пустая
методом Delete() и если нет, то методом Delete(true)
private void button1_Click(object sender, System.EventArgs e)
{
string path = @"C:\A";
DirectoryInfo directoryinfo = new DirectoryInfo(path);
try
{
if(directoryinfo.Exists)
{
directoryinfo.Delete();
textBox1.Text+="Директория удалена методом Delete()";
}
}
catch(IOException ex)
{
//Если директория не пуста, то выводим еще и информацию об этом.
textBox1.Text+=ex.ToString();
directoryinfo.Delete(true);
textBox1.Text+="Директория удалена методом Delete(true)";
}
}
Возможные исключения:
- IOException директория только для чтения или содержит один
или большее количество файлов или поддиректорий, и параметр recursive=false.
- SecurityException - вызывающий не имеет прав на операцию.
DirectoryInfo CreateSubdirectory(string path); -
cоздает поддиректорию по указанному пути.
path - путь относительно экземпляра класса DirectoryInfo.
Возвращаемое значение - DirectoryInfo для последней поддиректории,
указанной в path.
Следующий пример саздаст в директории A поддиректорию B и
в ней поддиректорию C, имя которой и выведет в TextBox.
private void button2_Click(object sender, System.EventArgs e)
{
string path = @"C:\A";
DirectoryInfo directoryinfo = new DirectoryInfo(path);
directoryinfo.Create();
DirectoryInfo subdirectoryinfo =
directoryinfo.CreateSubdirectory(@"B\C");
textBox1.Text+=subdirectoryinfo.Name;
}
Возможные исключения:
- ArgumentException - путь не существует или содержит недопустимые
символы.
- ArgumentNullException - путь есть нулевая ссылка.
- DirectoryNotFoundException - путь несуществует или находится на
несуществующем логическом диске.
- IOException - поддиректория не может быть создана или файл или поддиректория
уже имеются по указанному пути.
- PathTooLongException - указанный путь, имя файла, или оба
превышают определенную системой максимальную длину.
- SecurityException вызывающий не имеет требуемого разрешения на операцию.
DirectoryInfo[] GetDirectories(); public DirectoryInfo[] GetDirectories(string pattern);
- возвращают объекты типа DirectoryInfo для всех поддиректорий в директории, или соответствующих образцу
pattern.
Например:
string path = @"C:\WINNT";
DirectoryInfo directoryinfo = new DirectoryInfo(path);
DirectoryInfo[] dirsinfo = directoryinfo.GetDirectories("A*");
foreach (DirectoryInfo thisdir in dirsinfo)
{
textBox1.Text+=thisdir.Name+Environment.NewLine;
}
Возможный вывод:
addins
AppPatch
assembly
Возможные исключения:
- ArgumentNullException - pattern - нулевая ссылка.
- DirectoryNotFoundException - путь в DirectoryInfo недопустим,
или находится на неотображенном диске.
- SecurityException - пользователь не имеет требуемого разрешения.
FileInfo[] GetFiles(); FileInfo[] GetFiles(string searchPattern);
- возвращают объекты типа FileInfo для всех файлов в директории, или соответствующих образцу
pattern.
string path = @"C:\WINNT";
DirectoryInfo directoryinfo = new DirectoryInfo(path);
FileInfo[] fileinfo = directoryinfo.GetFiles("*.bmp");
foreach (FileInfo thisfileinfo in fileinfo)
{
textBox1.Text+=thisfileinfo.Name+Environment.NewLine;
}
Возможный вывод:
winnt.bmp
winnt256.bmp
Паркет.bmp
Пузыри.bmp
Сиреневый пух.bmp
Штукатурка.bmp
Японский мотив.bmp
Возможные исключения:
- ArgumentNullException - pattern - нулевая ссылка.
- DirectoryNotFoundException - путь в DirectoryInfo недопустим,
или находится на неотображенном диске.
- SecurityException - пользователь не имеет требуемого разрешения.
FileSystemInfo[] GetFileSystemInfos(); FileSystemInfo[] GetFileSystemInfos(string searchPattern);
- позволяет получить массив объектов типа FileSystemInfo,
отвечающий указанным в pattern критериям поиска.
string path = @"C:\WINNT";
DirectoryInfo directoryinfo = new DirectoryInfo(path);
FileSystemInfo[] fileinfo = directoryinfo.GetFileSystemInfos("*bmp*");
foreach (FileInfo thisfileinfo in fileinfo)
{
textBox1.Text+=thisfileinfo.Name+Environment.NewLine;
textBox1.Text+=thisfileinfo.Length.ToString()+Environment.NewLine;
}
Таким образом получаем дополнительную информацию о файлах каталога.
winnt.bmp
24076
winnt256.bmp
48540
Паркет.bmp
9522
Пузыри.bmp
65978
Сиреневый пух.bmp
16730
Штукатурка.bmp
65832
Японский мотив.bmp
26680
void MoveTo(string destDirName); - перемещает
директорию по новому пути destDirName, соответственно переопределяя
экземпляр класса DirectoryInfo.
string path = @"C:\A";
DirectoryInfo directoryinfo = new DirectoryInfo(path);
if(!directoryinfo.Exists)
directoryinfo.Create();
directoryinfo.MoveTo(@"c:\B");
Возможные исключения:
- ArgumentNullException - destDirName - нулевая ссылка или
перемещаемая директория и директория адресат одно и тоже имя.
- ArgumentException - destDirName пустая строка (" ").
- IOException - попытка перемещения на другой
логический диск или destDirName уже существует.
- SecurityException вызывающий не имеет требуемого разрешения.
void Refresh() - обновляет DirectoryInfo для
экземпляра.
Возможные исключения:
- ArgumentException - путь для которого был создан DirectoryInfo не найден.
- IOException - устройство (например дисковод) не готово.
Мы рассмотрели практически все свойства и методы, которые могут быть использованы при работе с
файлами и директориями. Ряд методов связанных с получением и использованием например
хеш кодов объектов, ремоутингом и т.п, входящие за границы целей
данного раздела, намеренно оставлены без упоминания - о них речь будет вестись
в соответствующих темах.
Еcли Вы пришли с поискового сервера - посетите мою главную страничку
На главной странице Вы найдете программы комплекса Veles - для тех кто готовится
к экзаменам на право управления автомобилем или мотоциклом,
программу NumberPhoto, созданную для работы с фото, сделанными цифровым фотоаппаратом,
программу Bricks - игрушку для детей и взрослых, программу записную книжку,
теоретический материал по программированию в среде Borland C++ builder, C# (C .Net).
На главную страницу
В начало страницы
К началу раздела
|