Автор работы: Пользователь скрыл имя, 21 Ноября 2011 в 09:41, дипломная работа
Целью дипломной работы является упростить работу с файлами и каталогами, а также операции над ними. Другими словами, необходимо создать файловый менеджер с поддержкой обзора каталогов, перемещения по ним, копирования, удаления, переименования файлов и каталогов, запуск, правка, поиск файлов по маске и пути, а также mp3-файлов по ID3-параметрам.
Актуальность исследования определяется тем, что сейчас, когда компьютер стал незаменимым атрибутом современной жизни, появилась необходимость в инструменте для работы с файловой структурой, в том числе mp3-файлами.
ВВЕДЕНИЕ
1. АНАЛИЗ ИСХОДНЫХ ДАННЫХ И ПОСТАНОВКА ЗАДАЧИ
1.1 Анализ предметной области
1.2 Анализ аналогов и прототипов
1.3 Перечень задач, подлежащих решению в процессе разработки
1.4 Входная, постоянная, выходная информации
2 ПРОЕКТИРОВАНИЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
2.1 Выбор и обоснование средств и методов решения для реализации проекта
2.2 Функциональные назначения программного обеспечения
3 РЕАЛИЗАЦИЯ И ТЕСТИРОВАНИЕ
4 ЭКОНОМИЧЕСКАЯ ЧАСТЬ
4.1 Правовые аспекты использования программного обеспечения
4.2 Расчет себестоимости разработанного программного продукта
4.2.1 Общие сведения
4.2.2 Расчет себестоимости программного продукта
5 ОХРАНА ТРУДА
5.1 Охрана жизнедеятельности на производстве
ЗАКЛЮЧЕНИЕ
СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ
ПРИЛОЖЕНИЕ А Техническое задание
ПРИЛОЖЕНИЕ Б Описание программы
ПРИЛОЖЕНИЕ В Программа и методика испытания
ПРИЛОЖЕНИЕ Г Руководство оператора
ПРИЛОЖЕНИЕ Г Руководство программиста
ПРИЛОЖЕНИЕ Д Содержание электронного носителя
ПРИЛОЖЕНИЕ Л Листинг программных модулей
begin
Activate;
SetPath(CurrentFullPath+'..');
end;
procedure TfrFilePanel.btDirRootClick(
begin
Activate;
SetPath(
end;
procedure TfrFilePanel.
Column: TListColumn; Point: TPoint);
begin
Activate;
Column.Width:=-1;
end;
procedure TfrFilePanel.lvFilesEditing(
var AllowEdit: Boolean);
Var
FileItem:TFileRecord;
NewName:String;
begin
AllowEdit:=False;
GetItemByList(Item, FileItem);
If FileItem.Name=DirUpItem.Name Then Exit;
// If IsDirectory(FileItem) Then Exit;
NewName:=GetFullName(FileItem)
If GetNameQuery('Переименовать "'+NewName+'" в:', NewName) Then
Begin
If TryRename(Item, NewName) Then Refresh;
End;
AllowEdit:=False;
end;
procedure TfrFilePanel.lvFilesInfoTip(
var InfoTip: String);
begin
{ If ((lvFiles.StringWidth(InfoTip)
Begin
InfoTip:='';
Exit;
End;
If Item.SubItems[0]<>'' Then
InfoTip:=InfoTip+'.'+Item.
end;
procedure TfrFilePanel.lvFilesChange(
Change: TItemChange);
{Var
FileItem:TFileRecord;
ID:Integer;}
Begin
MakeOutLabels;
{ GetItemByList(Item, FileItem);
ID:=FileItem.ID;
AllFiles.Items[ID].Checked:=
If Item.Checked Then
pnFilesInfo.Caption:=Item.
Else
pnFilesInfo.Caption:=Item.
end;
procedure TfrFilePanel.lvFilesEnter(
begin
Activate;
end;
procedure TfrFilePanel.lvFilesExit(
begin
// Deactivate;
end;
procedure TfrFilePanel.
begin
Activate;
end;
procedure TfrFilePanel.bbRefreshClick(
begin
Refresh;
Activate;
end;
function TfrFilePanel.NameDir:string;
var
Item:TFileRecord;
DirName:String;
begin
GetItemByList(lvFiles.
DirName:=GetFullName(Item);
NameDir:=DirName;
end;
procedure TfrFilePanel.CopyDir(const FromFolder: string; const ToFolder: string);
var
Fo : TSHFileOpStruct;
buffer : array[0..4096] of char;
p : pchar;
begin
//If Not(GetNameQuery('
FillChar(Buffer, sizeof(Buffer), #0);
p := @buffer;
StrECopy(p, PChar(FromFolder)); //директория, которую мы хотим скопировать
FillChar(Fo, sizeof(Fo), #0);
Fo.Wnd := Application.Handle;
Fo.wFunc := FO_COPY;
Fo.pFrom := @Buffer;
Fo.pTo := PChar(ToFolder);
//куда будет скопирована
Fo.fFlags := 0;
if ((SHFileOperation(Fo) <> 0) or (Fo.fAnyOperationsAborted <> false)) then
ShowMessage('File copy process cancelled')
end;
function TfrFilePanel.FullRemoveDir(
StopIfNotAllDeleted, RemoveRoot: boolean): Boolean;
var
i: Integer;
SRec: TSearchRec;
FN, TmpStr: string;
ListItem:TListItem;
Item:TFileRecord;
begin
ListItem:=lvFiles.ItemFocused;
GetItemByList(ListItem, Item);
If IsDirectory(Item) Then
begin
Result := False;
if not DirectoryExists(Dir) then
exit;
Result := True;
// Добавляем слэш в конце и задаем маску - "все файлы и директории"
Dir := IncludeTrailingBackslash(Dir);
i := FindFirst(Dir + '*', faAnyFile, SRec);
try
while i = 0 do
begin
// Получаем полный путь к файлу или директорию
FN := Dir + SRec.Name;
// Если это директория
if SRec.Attr = faDirectory then
begin
// Рекурсивный вызов этой же функции с ключом удаления корня
if (SRec.Name <> '') and (SRec.Name <> '.') and (SRec.Name <> '..') then
begin
if DeleteAllFilesAndFolders then
FileSetAttr(FN, faArchive);
Result := FullRemoveDir(FN, DeleteAllFilesAndFolders,
StopIfNotAllDeleted, True);
if not Result and StopIfNotAllDeleted then
exit;
end;
end
else // Иначеудаляемфайл
begin
if DeleteAllFilesAndFolders then
FileSetAttr(FN, faArchive);
Result := SysUtils.DeleteFile(FN);
if not Result and StopIfNotAllDeleted then
exit;
end;
// Берем следующий файл или директорию
i := FindNext(SRec);
end;
finally
SysUtils.FindClose(SRec);
end;
if not Result then
exit;
if RemoveRoot then // Если необходимо удалить корень - удаляем
if not RemoveDir(Dir) then
Result := false;
end
else deletefile(dir);
end;
end.
Листинг2 – Модуль FilesExU.pas
{ Модуль FilesExU.pas } { гр. П-1 }
{ Разработчик: Герасимчук, А.В.} { Модифицирован: 10 июня 2011 }
{ )
{ Содержит функции
построения списка файлов }
unit FilesExU;
interface
Uses
SysUtils, FileCtrl, ShellApi,
Windows;
Const
F_ER_SUCCESS=0;
F_ER_HIMSELF=-1;
F_ER_EXISTS =-2;
F_ER_NOT_EXISTS=-3;
F_ER_DIREXISTS=-4;
F_ER_NOTCOPY=-128;
F_ER_ERROR=-255;
ConstCopyToDir:String='';
Procedure GetDiskSize(CurrentDrive:Char; Var TotalBytes, TotalFree:Int64);
Procedure GetRealDiskSize(Drive:Char;
Var TotalBytes, TotalFree:Double);
Function ExecuteOneFile(WorkDir, FileName, Params:String):Integer;
Function GetExecuteError(ErrorCode:
Function CopyOneFile(FromFile, ToFile:String; PrevCheck:Boolean):Integer;
Function GetFileError(ErrorCode:
Function RenameOneFile(OldName, NewName:String):Integer;
Function DeleteOneFile(FileName:String)
Function DeleteOneDir(FileName:String):
Function CreateOneFolder(FolderName:
implementation
function GetDiskFreeSpaceEx(
var lpFreeBytesAvailableToCaller : Integer;
var lpTotalNumberOfBytes: Integer;
var lpTotalNumberOfFreeBytes: Integer) : boolean;
stdcall;
external 'kernel32'
name 'GetDiskFreeSpaceExA';
Procedure GetDiskSize(CurrentDrive:Char; Var TotalBytes, TotalFree:Int64);
Var
Drive:Byte;
Begin
CurrentDrive:=UpCase(
Drive:=Ord(CurrentDrive)-64;
TotalBytes:=DiskSize(Drive);
TotalFree:=DiskFree(Drive);
End;
Procedure GetRealDiskSize(Drive:Char; Var TotalBytes, TotalFree:Double);
Var
AvailToCall : integer;
TheSize : integer;
FreeAvail : integer;
TheDrive:String;
Begin
TheDrive:=Drive+':\'+#0;
GetDiskFreeSpaceEx(@TheDrive[
{$IFOPT Q+}
{$DEFINE TURNOVERFLOWON}
{$Q-}
{$ENDIF}
If TheSize >= 0 then
TotalBytes := TheSize
Else
if TheSize = -1 then
begin
TotalBytes := $7FFFFFFF;
TotalBytes := TotalBytes * 2;
TotalBytes := TotalBytes + 1;
end
else begin
TotalBytes := $7FFFFFFF;
TotalBytes := TotalBytes + abs($7FFFFFFF - TheSize);
end;
If AvailToCall >= 0 then
TotalFree := AvailToCall
else
if AvailToCall = -1 then
begin
TotalFree := $7FFFFFFF;
TotalFree := TotalFree * 2;
TotalFree := TotalFree + 1;
end
else begin
TotalFree := $7FFFFFFF;
TotalFree := TotalFree + abs($7FFFFFFF - AvailToCall);
end;
End;
Function ExecuteOneFile(WorkDir, FileName, Params:String):Integer;
Begin
FileName:=FileName+#0;
WorkDir:=WorkDir+#0;
Params:=Params+#0;
Result:=ShellExecute(0, 'open', @FileName[1], @Params[1], @WorkDir[1], SW_SHOWNORMAL);
End;
Function GetExecuteError(ErrorCode:
Begin
Result:='';
If ErrorCode>32 Then Exit;
Case ErrorCode Of
0
: Result:='Системе не хватает
ERROR_FILE_NOT_FOUND : Result:='Файлненайден';
ERROR_PATH_NOT_FOUND : Result:='Путьненайден';
ERROR_BAD_FORMAT : Result:='Ошибкавформатефайла';
SE_ERR_ACCESSDENIED : Result:='Доступкфайлузакрыт';
SE_ERR_ASSOCINCOMPLETE:
Result:='
SE_ERR_DLLNOTFOUND
: Result:='Динамическая
SE_ERR_NOASSOC
: Result:='Отсутствует
SE_ERR_OOM
: Result:='Недостаточно памяти
SE_ERR_SHARE
: Result:='Ошибка совместного
Else
Result:='Ошибка при запуске программы';
End;
End;
Function CopyOneFile(FromFile, ToFile:String; PrevCheck:Boolean):Integer;
Begin
If PrevCheck Then
Begin
If FromFile=ToFile Then
Begin
Result:=F_ER_HIMSELF;
Exit;
End;
If FileExists(ToFile) Then
Begin
Result:=F_ER_EXISTS;
Exit;
End;
End;
Информация о работе Файловый менеджер с поддержкой поиска mp3-файлов по ID3-параметрам