Автор работы: Пользователь скрыл имя, 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-параметрам