Список используемых источников
1 Троелсен Э С# и платформа .Net. – М.: Питер, 2003
2 Багласова Т.Г. Методические указания по оформлению курсовых и дипломных работ. -М.: ТБП, 2006
3 Павловская Т. С#. Программирование на языке высокого уровня. Учебник для вузов. – М.: Питер, 2008
4 Леонтьев В.П. Новейшая энциклопедия персонального компьютера. – М.: ОЛМА-ПРЕСС, 2002
5 Липсиц А.М. CASE-технологии. Современные методы и средства проектирования информационных систем. – М.: Бином, 1999
6 Леоненков А. UML2 – М.: БХВ-Петербург, 2007
7 ГОСТ 2.106-96. ЕСКД. Текстовые документы
8 ГОСТ 19.401-2000. ЕСПД. Текст программы
Приложение А
(обязательное)
Текст программы
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using System.IO;
using System.Runtime.InteropServices;
namespace DramaShellSolution
{
public partial class MainForm : Form
{
#region Константы
private const uint SHGFI_ICON = 0x100; // get icon
private const uint SHGFI_LINKOVERLAY = 0x8000; // put a link overlay on icon
private const uint SHGFI_SELECTED = 0x10000; // show icon in selected state
private const uint SHGFI_LARGEICON = 0x0; // get large icon
private const uint SHGFI_SMALLICON = 0x1; // get small icon
private const uint SHGFI_OPENICON = 0x2; // get open icon
private const uint SHGFI_SHELLICONSIZE = 0x4; // get shell size icon
private const uint SHGFI_USEFILEATTRIBUTES = 0x10; // use passed dwFileAttribute
private const uint SHGFI_TYPENAME = 0x400;
private const string DEFAULT_PATH = @"C:\";
#endregion
// Структура, содержащая информацию о файле
[StructLayout(LayoutKind.Sequential)]
private struct SHFILEINFO
{
public IntPtr hIcon;
public IntPtr iIcon;
public uint dwAttributes;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
public string szDisplayName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
public string szTypeName;
};
// Импорт функции получения информации о файле из Win32 библиотеки <shell32.dll>
[DllImport("shell32.dll")]
private static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbSizeFileInfo, uint uFlags);
// Импорт функции уничтожения иконки из Win32 библиотеки <user32.dll>
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public extern static bool DestroyIcon(IntPtr handle);
// Перечисление размеров иконок
public enum IconSize { Large, Small, Shell };
// Список иконок файлов
private ImageList fileIcons = new ImageList();
public static string szPath = "";
private string szPathToAction = "";
private bool bActIsCopy = false,
bActIsMove = false;
CreateFolder createFolder = new CreateFolder();
CreateFile createFile = new CreateFile();
public MainForm()
{
InitializeComponent();
}
private void MainForm_Load(object sender, EventArgs e)
{
szPath = DEFAULT_PATH; // Установка пути по-умолчанию (C:\)
fileBrowser.LargeImageList = fileIcons; // Сохранение списка иконок
Navigate(); // Начать Навигацию
}
private static void Add(string pszPath, ImageList imageList, uint uFlags)
{
SHFILEINFO SHInfo = new SHFILEINFO();
// Получение информации о файле
IntPtr hImg = SHGetFileInfo(pszPath, 0, ref SHInfo, (uint)Marshal.SizeOf(SHInfo), SHGFI_ICON | uFlags);
imageList.Images.Add(Icon.FromHandle(SHInfo.hIcon)); // Добавляем полученную иконку в общий список
DestroyIcon(SHInfo.hIcon); // Уничтожаем полученную иконку
}
public static void AddIconOfFile(string fileName, IconSize iconSize, bool selectedState, bool openState, bool linkOverlay, ImageList destinationImagelist)
{
// Определение флагов, необходимых для загрузки
uint uFlags = ((iconSize == IconSize.Large) ? SHGFI_LARGEICON : 0) |
((iconSize == IconSize.Small) ? SHGFI_SMALLICON : 0) |
((iconSize == IconSize.Shell) ? SHGFI_SHELLICONSIZE : 0) |
((selectedState) ? SHGFI_SELECTED : 0) |
((openState) ? SHGFI_OPENICON : 0) |
((linkOverlay) ? SHGFI_LINKOVERLAY : 0);
Add(fileName, destinationImagelist, uFlags); // добавление файла
}
public void Navigate(string path)
{
szPath = path;
Navigate();
}
public void Navigate()
{
ReleaseNavigate();
}
private void ReleaseNavigate()
// Основной метод навигации по директориям
{
if (!DesignMode)
// Если в данный момент не в режиме отрисовки
{
try
{
try
{
if (!Directory.Exists(szPath))
// Если путь не существует
{
MessageBox.Show("Не верный путь!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return;
}
} //try
catch (UnauthorizedAccessException)
// Если доступ к директории закрыт системой
{
UpOnOneDirectory(); // Возврат на одну директорию вверх
MessageBox.Show("Доступ запрещен!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
} //catch (UnauthorizedAccessException)
fileBrowser.BeginUpdate(); // Начало обновления окна браузера
this.fileBrowser.Items.Clear(); // Очистка окна браузера
if (fileIcons.Images.Count > 0) fileIcons.Images.Clear(); // Очистка списка иконок
DirectoryInfo dInfo = new DirectoryInfo(szPath);
fileIcons.ColorDepth = ColorDepth.Depth32Bit;
fileIcons.ImageSize = new Size(32, 32);
foreach (DirectoryInfo di in dInfo.GetDirectories())
{
AddIconOfFile(di.FullName, IconSize.Large, false, false, false, fileIcons);
fileBrowser.Items.Add(di.Name, fileIcons.Images.Count - 1);
} //foreach (DirectoryInfo di in dInfo.GetDirectories())
foreach (FileInfo fi in dInfo.GetFiles())
{
AddIconOfFile(fi.FullName, IconSize.Large, false, false, false, fileIcons);
fileBrowser.Items.Add(fi.Name, fileIcons.Images.Count - 1);
} //foreach (FileInfo fi in dInfo.GetFiles())
} //try
finally
{
fileBrowser.EndUpdate();
curPathBox.Text = szPath;
}
} //if (!DesignMode)
}
private void DirectoryCopy(string pathSource, string pathTo)
{
if (pathSource == null || pathSource == String.Empty || !Directory.Exists(pathSource))
throw new ArgumentException();
if (pathTo == null || pathTo == String.Empty)
throw new ArgumentException();
if (!Directory.Exists(Path.Combine(pathTo, Path.GetFileName(pathSource))))
Directory.CreateDirectory(Path.Combine(pathTo, Path.GetFileName(pathSource)));
foreach (FileInfo fi in (new DirectoryInfo(pathSource)).GetFiles())
fi.CopyTo(Path.Combine(pathTo, Path.GetFileName(pathSource)) + Path.DirectorySeparatorChar + fi.Name, true);
foreach (DirectoryInfo di in (new DirectoryInfo(pathSource)).GetDirectories())
DirectoryCopy(Path.Combine(pathSource, di.Name), Path.Combine(pathTo, Path.GetFileName(pathSource)));
} //private void DirectoryCopy(string pathSource, string pathTo)
public void UpOnOneDirectory()
{
Navigate(Microsoft.VisualBasic.FileIO.FileSystem.GetParentPath(szPath));
} //public void UpOnOneDirectory()
#region События браузера
void fileBrowser_DoubleClick(object sender, System.EventArgs e)
{
if (this.fileBrowser.SelectedItems == null || this.fileBrowser.SelectedItems.Count != 1) return;
if (Directory.Exists(Path.Combine(szPath, this.fileBrowser.SelectedItems[0].Text)))
Navigate(Path.Combine(szPath, this.fileBrowser.SelectedItems[0].Text));
else
using (System.Diagnostics.Process proc = new System.Diagnostics.Process())
{
try
{
proc.StartInfo = new System.Diagnostics.ProcessStartInfo(Path.Combine(szPath, this.fileBrowser.SelectedItems[0].Text));
proc.Start();
} //try
catch (Win32Exception ex)
{
MessageBox.Show(ex.Message.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
} //catch (Win32Exception ex)
} //using (System.Diagnostics.Process proc = new System.Diagnostics.Process())
} //void fileBrowser_DoubleClick(object sender, System.EventArgs e)
private void fileBrowser_ItemDrag(object sender, ItemDragEventArgs e)
{
if (fileBrowser.SelectedItems == null || fileBrowser.SelectedItems.Count == 0) return;
string[] files = new string[fileBrowser.SelectedItems.Count];
for (int i = 0; i < fileBrowser.SelectedItems.Count; i++)
files[i] = Path.Combine(szPath, fileBrowser.SelectedItems[i].Text);
DataObject data = new DataObject();
data.SetData(DataFormats.FileDrop, true, files);
DoDragDrop(data, DragDropEffects.Copy);
} //private void fileBrowser_ItemDrag(object sender, ItemDragEventArgs e)
private void fileBrowser_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
e.Effect = DragDropEffects.All;
} //private void fileBrowser_DragEnter(object sender, DragEventArgs e)
private void fileBrowser_DragDrop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
object obj = e.Data.GetData(DataFormats.FileDrop);
if (obj == null)
return;
if (!(obj is Array))
return;
foreach (object var in (Array)obj)
{
if (Directory.Exists(var.ToString()))
{
DirectoryCopy(var.ToString(), szPath);
}
else if (File.Exists(var.ToString()))
{
File.Copy(var.ToString(), Path.Combine(szPath, Path.GetFileName(var.ToString())));
}
}
Navigate();
}
}
private void fileBrowser_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Back) UpOnOneDirectory();
if (e.Control && e.KeyCode == Keys.C)
{
szPathToAction = Path.Combine(szPath, fileBrowser.SelectedItems[0].Text);
bActIsCopy = true;
} //if (e.Control && e.KeyCode == Keys.C)
if (e.Control && e.KeyCode == Keys.V && szPathToAction != "")
{
if (bActIsCopy)
{
CManager.Copy(szPathToAction, szPath);
bActIsCopy = false;
} //if (bActIsCopy)
if (bActIsMove)
{
CManager.Move(szPathToAction, szPath);
bActIsMove = false;
szPathToAction = "";
} //if (bActIsMove)
Navigate();
} //if (e.Control && e.KeyCode == Keys.V && szPathToAction != "")
if (e.KeyCode == Keys.Delete)
{
CManager.Delete(Path.Combine(szPath, fileBrowser.SelectedItems[0].Text));
Navigate();
} //if (e.KeyCode == Keys.Delete)
}
private void button1_Click(object sender, EventArgs e)
{
Navigate(curPathBox.Text);
}
private void upBtn_Click(object sender, EventArgs e)
{
UpOnOneDirectory();
}
private void копироватьToolStripMenuItem_Click(object sender, EventArgs e)
{
szPathToAction = Path.Combine(szPath, fileBrowser.SelectedItems[0].Text);
bActIsCopy = true;
}
private void переместитьToolStripMenuItem_Click(object sender, EventArgs e)
{
szPathToAction = Path.Combine(szPath, fileBrowser.SelectedItems[0].Text);
bActIsMove = true;
}
private void удалитьToolStripMenuItem_Click(object sender, EventArgs e)
{
CManager.Delete(Path.Combine(szPath, fileBrowser.SelectedItems[0].Text));
Navigate();
}
private void папкуToolStripMenuItem_Click(object sender, EventArgs e)
{
createFolder.Visible = true;
}
private void файлToolStripMenuItem_Click(object sender, EventArgs e)
{
createFile.Visible = true;
}
private void вставитьToolStripMenuItem_Click(object sender, EventArgs e)
{
if (bActIsCopy)
{
CManager.Copy(szPathToAction, szPath);
bActIsCopy = false;
} //if (bActIsCopy)
if (bActIsMove)
{
CManager.Move(szPathToAction, szPath);
bActIsMove = false;
szPathToAction = "";
} //if (bActIsMove)
Navigate();
}
private void помощьToolStripMenuItem_Click(object sender, EventArgs e)
{
using (System.Diagnostics.Process proc = new System.Diagnostics.Process())
{
try
{
proc.StartInfo = new System.Diagnostics.ProcessStartInfo(@"DShell Справочная информация.htm");
proc.Start();
} //try
catch (Win32Exception ex)
{
MessageBox.Show(ex.Message.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
} //catch (Win32Exception ex)
} //using (System.Diagnostics.Process proc = new System.Diagnostics.Process())
}
#endregion
}
public static class CManager
{
public static void Copy(string sourcePath, string targetPath)
{
if (Path.HasExtension(sourcePath))
{
string targetFile = Path.Combine(targetPath, Path.GetFileName(sourcePath));
FileSystem.CopyFile(sourcePath, targetFile, UIOption.AllDialogs, UICancelOption.ThrowException);
return;
} //if (Path.HasExtension(targetFile))
FileSystem.CopyDirectory(sourcePath, targetPath, UIOption.AllDialogs, UICancelOption.ThrowException);
} //public static void Copy(string fileName, string destination)
public static void Move(string sourcePath, string targetPath)
{
if (Path.HasExtension(sourcePath))
{
string targetFile = Path.Combine(targetPath, Path.GetFileName(sourcePath));
FileSystem.MoveFile(sourcePath, targetFile, UIOption.AllDialogs, UICancelOption.ThrowException);
return;
} //if (Path.HasExtension(targetFile))
FileSystem.MoveDirectory(sourcePath, targetPath, UIOption.AllDialogs, UICancelOption.ThrowException);
} //public static void Move(string sourcePath, string targetPath)
public static void Delete(string path)
{
if (Path.HasExtension(path))
{
FileSystem.DeleteFile(path, UIOption.AllDialogs, RecycleOption.DeletePermanently);
return;
} //if (Path.HasExtension(targetFile))
FileSystem.DeleteDirectory(path, UIOption.AllDialogs, RecycleOption.DeletePermanently, UICancelOption.ThrowException);
} //public static void Delete(string sourcePath, string targetPath)
public static void Create(string path, string name)
{
string fullPath = Path.Combine(path, name);
if (Path.HasExtension(fullPath))
{
File.Create(fullPath);
return;
} //if (Path.HasExtension(targetFile))
Directory.CreateDirectory(fullPath);
} //public static void Create(string path)
} //class CManager
} // namespace end