Файловый менеджер

Автор: Пользователь скрыл имя, 29 Апреля 2013 в 11:44, курсовая работа

Краткое описание

Данный программный продукт разрабатывается для того, чтобы работать с имеющимися дисками и их файловыми системами, осуществлять такие действия как копирование, перемещение, удаление файлов и папок, создание новых папок, а также наглядно отображать имеющиеся на дисках файлы и папки как в виде дерева, так и виде таблицы. Причём необходимо предусмотреть переключение между деревом и таблицей. Также необходимо дать пользователю возможность вводить путь к интересующей его папке. И необходимо отображать текущую папку с полным путём к ней. Необходимо предусмотреть возможность выбора диска из имеющихся в компьютере. Действия должны осуществляться как с помощью меню, так и с помощью пиктограмм панели управления.

Оглавление

1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ 3
1.1. Введение 3
1.2. Основания для разработки 3
1.3. Назначение разработки 3
1.4. Требования к программе или программному изделию 3
1.5. Условия эксплуатации 4
1.6. Требования к составу и параметрам технических средств 4
1.7. Требования к информационной и программной совместимости 4
1.8. Требования к программной документации 5
1.9. Стадии и этапы разработки 5
2. ИССЛЕДОВАТЕЛЬСКАЯ ЧАСТЬ 7
2.1. Постановка задачи 7
2.2. Общие сведения 7
2.3. Файловые системы 8
3. КОНСТРУКТОРСКАЯ ЧАСТЬ 12
3.1. Общие сведения 12
3.2. Руководство программиста 12
3.2.1. Структура программы 12
3.2.2. Структуры данных 13
3.2.3. Средства обмена данными 14
3.2.4. Реализация пользовательского интерфейса программы 15
3.2.5. Функции работы с файловой системой 20
4. ТЕХНОЛОГИЧЕСКАЯ ЧАСТЬ 22
4.1. Обращение к программе 22
4.2. Входные данные 22
4.3. Выходные данные 22
4.4. Руководство пользователя 22
4.6.1. Назначение программы 22
4.6.2. Требования к аппаратной и программной средам 22
4.6.3. Выполнение программы 23
4.6.4. Сообщения пользователю 28
5.ЛИТЕРАТУРА 30
6.ПРИЛОЖЕНИЕ 31

Файлы: 1 файл

my_Записка.doc

— 1.21 Мб (Скачать)

item.pszText="..";

item.lParam = (LPARAM)pData;

ListView_InsertItem(hwndlv, &item);

item.mask = LVIF_TEXT;

item.iSubItem = 1;

item.pszText="<DIR>";

ListView_SetItem(hwndlv, &item);

item.iSubItem = 2;

item.pszText=" ";

ListView_SetItem(hwndlv, &item);

item.iSubItem = 3;

item.pszText=" ";

ListView_SetItem(hwndlv, &item);

item.iItem++;

}

    }

while (FindNextFile(hFile, &FileData));

  }

  FindClose(hFile);

  SendMessage(hwndStatus, SB_SETTEXT, (WPARAM) 0, (LPARAM) "Ready" ); //отображаем в строке состояния готовность

}

 

unsigned long GetFolderSize(LPCSTR ParentDir)

{

    WIN32_FIND_DATA FData;

char DirName[1024];

unsigned long ChSize = 0;

    SetCurrentDirectory(ParentDir);

HANDLE h_File = FindFirstFile("*", &FData);

 

if (h_File != INVALID_HANDLE_VALUE)

{

do

{

if (lstrcmp(FData.cFileName,"..")!=0 && strcmp(FData.cFileName,".")!=0)

{

if (FData.dwFileAttributes &   FILE_ATTRIBUTE_DIRECTORY)

{

strcpy(DirName, ParentDir);

strcat(DirName, FData.cFileName);

strcat(DirName,"\\");

if (strlen(DirName)<1024)

{

ChSize = GetFolderSize(DirName);

SetCurrentDirectory(ParentDir);

}

else

ChSize = 9999999;

if (ChSize > 1450000)

return 9999999;

}

else

{

ChSize = ChSize + FData.nFileSizeLow;

if (ChSize > 1450000)

return 9999999;

}

}

}

while (FindNextFile(h_File, &FData));

}

FindClose(h_File);

return ChSize;

}

 

void OnDblClick(HWND hwndlv, char* CurrentDirectory, HIMAGELIST himlSmall)

{

char csSDir[]="<DIR>";

char csName[128];

char csCopy[1024];

char CopyCurrDir[1024];

int iError;

int iNumber;

strcpy(CopyCurrDir, CurrentDirectory);

iNumber=ListView_GetNextItem(hwndlv,-1,LVNI_SELECTED);

ListView_GetItemText(hwndlv,iNumber,1,csName,80);

if (strcmp(csName,csSDir)==0)

{

ListView_GetItemText(hwndlv,iNumber,0,csName,80);

if (strcmp(csName,"..") != 0)

{

//открываем подпапку

strcpy(csCopy,CurrentDirectory);

strcat(csCopy,csName);

strcat(csCopy,"\\");

strcpy(CurrentDirectory,csCopy);

}

else

//возвращаемся на уровень выше

char* rez;

int irez;

CurrentDirectory[strlen(CurrentDirectory)-1]=0;

rez = strrchr(CurrentDirectory,'\\');

irez=rez-CurrentDirectory+1;

CurrentDirectory[irez]=0;

}

iError=SetCurrentDirectory(CurrentDirectory);

if (iError!=0)

{

FillListView(hwndlv, CurrentDirectory, himlSmall);

SetWindowText(hwndEdit, CurrentDirectory);

}

            else

{      

MessageBox(NULL,

                     "Не удалось открыть папку",

                          "Ошибка" ,

                          MB_ICONERROR | MB_OK | MB_TASKMODAL);

strcpy(CurrentDirectory, CopyCurrDir);

}

 

       }

   else

   {

ListView_GetItemText(hwndlv,iNumber,0,csName,80);

strcpy(csCopy,CurrentDirectory);

strcat(csCopy,csName);

strcat(csCopy,".");

ListView_GetItemText(hwndlv,ListView_GetSelectionMark(hwndlv),1,csName,90);

strcat(csCopy,csName);

ShellExecute(mainhwnd,NULL,csCopy,NULL,NULL,SW_SHOWNORMAL);

   }

 

}

 

int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)

{

char *cs1,*cs2;

WIN32_FIND_DATA *item1;

item1 = (WIN32_FIND_DATA *)lParam1;

    WIN32_FIND_DATA *item2;

item2 = (WIN32_FIND_DATA *)lParam2;

int rez;

switch (lParamSort)

{

case 0:

if (lstrcmpi(item1->cFileName,"..")==0)

rez = -1;

else

if (lstrcmpi(item2->cFileName,"..")==0)

rez = 1;

else

if ((item1->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) &&

(item2->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))

rez = strcmpi((item1->cFileName), (item2->cFileName));

else

{

if (item1->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)

rez = -1;

else

if (item2->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)

rez = 1;

else

rez = strcmpi((item1->cFileName), (item2->cFileName));

}

return rez;

break;

case 1:

if (lstrcmpi(item1->cFileName,"..")==0)

rez = -1;

else

if (lstrcmpi(item2->cFileName,"..")==0)

rez = 1;

else

if (!(item1->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) &&

!(item2->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))

{

cs1=strrchr(item1->cFileName, '.');

cs2=strrchr(item2->cFileName, '.');

if ((cs1!=NULL) && (cs2!=NULL))

{

cs1 = _strlwr(cs1);

cs2 = _strlwr(cs2);

rez = strcmp(cs1,cs2);

}

else

if ((cs1==NULL)&&(cs2!=NULL))

rez = -1;

else

if ((cs2==NULL)&&(cs1!=NULL))

rez = 1;

else

rez = 0;

}

else

{

if (item1->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)

rez = -1;

else

if (item2->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)

rez = 1;

}

 

return rez;

break;

case 2:

if (lstrcmpi(item1->cFileName,"..")==0)

rez = -1;

else

if (lstrcmpi(item2->cFileName,"..")==0)

rez = 1;

else

if (!(item1->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) &&

!(item2->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))

rez = item1->nFileSizeLow - item2->nFileSizeLow;

else

{

if (item1->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)

rez = -1;

else

if (item2->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)

rez = 1;

}

return rez;

break;

case 3:

if (lstrcmpi(item1->cFileName,"..")==0)

rez = -1;

else

if (lstrcmpi(item2->cFileName,"..")==0)

rez = 1;

else

if ((item1->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) &&

(item2->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))

rez = CompareFileTime(&item1->ftLastWriteTime,&item2->ftLastWriteTime);

else

{

if (item1->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)

rez = -1;

else

if (item2->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)

rez = 1;

else

rez = CompareFileTime(&item1->ftLastWriteTime,&item2->ftLastWriteTime);

}

return rez;

break;

default :

return 0;

};

 

}

 

//Проверка диска во флопике

BOOL IsDiskInDrive ( LPTSTR lpszDrive )

{

UINT errmode;

TCHAR szVolName[256];

DWORD dwMaxComSize;

DWORD dwFlags;

TCHAR szFS[256];

BOOL bRes;

 

errmode = SetErrorMode ( SEM_FAILCRITICALERRORS );

//если не сделать SetErrorMode - выскочит стандартное окошко "Drive Not Ready"

bRes = GetVolumeInformation ( lpszDrive,

szVolName,

sizeof(szVolName),

NULL,

&dwMaxComSize,

&dwFlags,

szFS,

sizeof(szFS) );

SetErrorMode ( errmode );

return bRes;

}

 

void RefreshComboInf(HWND hwndCombo) //считывание выбранного элемента

{

ComboInd=SendMessage(

(HWND) hwndCombo,        // handle to destination window

CB_GETCURSEL,       // message to send

0,    // not used; must be zero

0     // not used; must be zero

);

 

SendMessage(

(HWND) hwndCombo,       // handle to destination window

CB_GETLBTEXT,    // message to send

(WPARAM) ComboInd,   // item index

LPARAM(CurentDiskName)    // not used; must be zero

);

}

 

void CreateNewFolder(HWND hwndlv, LPCSTR CurrDir, HIMAGELIST himlSmall)

{

char csName[256],csN[6],csN2[256];

int hope;

strcpy(csName,CurrDir);

strcat(csName,"Новая папка");

strcpy(csN2,csName);

int iError=0;

for (hope=0;(hope<101)&&(iError==0);hope++)

{

iError=CreateDirectory(csN2,NULL);

if (iError==0)

{

strcpy(csN,"(");

wsprintf(csN2,"%d",hope);

strcat(csN,csN2);

strcat(csN,")");

strcpy(csN2,csName);

strcat(csN2,csN);

}

}

if (iError!=0)

{

if (strcmp(CurrDir1,CurrDir2)==0)

{

FillListView(hwndListView1, CurrDir1, himlSmall1);

FillListView(hwndListView2, CurrDir2, himlSmall2);

}

else

FillListView(hwndlv, CurrDir, himlSmall);

}

else

        MessageBox(NULL,

"Неудалось создать новую  папку",

"Ошибка" ,

MB_ICONERROR | MB_OK | MB_TASKMODAL ); 

}

 

void DeleteFile(HWND hwndlv, LPCSTR CurrDir)

{

char csName[256],csFirst[256],csSDir[]="<DIR>",csNameFile[256];

int iError;

SHFILEOPSTRUCT *lpFileOp;

ListView_GetItemText(hwndlv,ListView_GetSelectionMark(hwndlv),0,csFirst,90);

    ListView_GetItemText(hwndlv,ListView_GetSelectionMark(hwndlv),1,csNameFile,90);

strcpy(csName,CurrDir);

strcat(csName,csFirst);

if (strcmp(csNameFile,csSDir)!=0)

{

strcat(csName,".");

strcat(csName,csNameFile);

}

csName[strlen(csName)+1]='\0';

lpFileOp=new(SHFILEOPSTRUCT);

lpFileOp->hwnd=mainhwnd;

lpFileOp->wFunc=FO_DELETE;

lpFileOp->pFrom=csName;

lpFileOp->pTo=NULL;

lpFileOp->fFlags=FOF_CONFIRMMOUSE | FOF_ALLOWUNDO;  

iError=SHFileOperation(lpFileOp);

if ((iError==0)&&(lpFileOp->fAnyOperationsAborted==0))

if (strcmp(CurrDir1,CurrDir2)==0)

{

FillListView(hwndListView1, CurrDir1, himlSmall1);

FillListView(hwndListView2, CurrDir2, himlSmall2);

}

else

ListView_DeleteItem(hwndlv,ListView_GetSelectionMark(hwndlv));

}

}

 

void Renamefile(HWND hwndlv)

{

ListView_EditLabel(hwndlv,ListView_GetSelectionMark(hwndlv));

}

 

void CopyFile(HWND hwndlv1, HWND hwndlv2, LPCSTR CurrD1, LPCSTR CurrD2, HIMAGELIST himlSmall)

{

char csName[256],csFirst[256],csSDir[]="<DIR>",csNameFile[256];

char csNF[90];

ListView_GetItemText(hwndlv1,ListView_GetSelectionMark(hwndlv1),0,csFirst,90);

    ListView_GetItemText(hwndlv1,ListView_GetSelectionMark(hwndlv1),1,csNameFile,90);

strcpy(csName,CurrD1);

strcat(csName,csFirst);

strcpy(csNF,csFirst);

    if (strcmp(csNameFile,csSDir)!=0)

{         

strcat(csName,".");

strcat(csName,csNameFile);

strcat(csNF,".");

strcat(csNF,csNameFile);

}

csName[strlen(csName)+1]='\0';

 

PasteFile(hwndlv1, hwndlv2, CurrD2, himlSmall, csName, csNF, 0, 0); 

}

 

void CutFile(HWND hwndlv1, HWND hwndlv2, LPCSTR CurrD1, LPCSTR CurrD2, HIMAGELIST himlSmall)

{

char csName[256],csFirst[256],csSDir[]="<DIR>",csNameFile[256];

char csNF[90];

int index;

ListView_GetItemText(hwndlv1,ListView_GetSelectionMark(hwndlv1),0,csFirst,90);

ListView_GetItemText(hwndlv1,ListView_GetSelectionMark(hwndlv1),1,csNameFile,90);

strcpy(csName,CurrD1);

strcat(csName,csFirst);

strcpy(csNF,csFirst);

    if (strcmp(csNameFile,csSDir)!=0)

{         

strcat(csName,".");

strcat(csName,csNameFile);

strcat(csNF,".");

strcat(csNF,csNameFile);

}

csName[strlen(csName)+1]='\0';

index=ListView_GetSelectionMark(hwndlv1);

PasteFile(hwndlv1, hwndlv2, CurrD2, himlSmall, csName, csNF, 1, index);

}

 

void PasteFile(HWND hwndlv1, HWND hwndlv2, LPCSTR CurrDir,

   HIMAGELIST himlSmall,LPCSTR csFileNameCopy,LPCSTR csNF, bool cut, int index)

{

char csName[256],csFirst[256],csSDir[]="<DIR>",csNameFile[256];

SHFILEOPSTRUCT *lpFileOp;

int iError;

strcpy(csNameFile,CurrDir);

strcat(csNameFile,csNF);

csNameFile[strlen(csNameFile)+1]='\0';

lpFileOp=new(SHFILEOPSTRUCT);

lpFileOp->hwnd=mainhwnd;

lpFileOp->pFrom=csFileNameCopy;

lpFileOp->pTo=csNameFile;

lpFileOp->fFlags= FOF_ALLOWUNDO;

if (cut)

lpFileOp->wFunc=FO_MOVE;

else

lpFileOp->wFunc=FO_COPY;

    iError=SHFileOperation(lpFileOp);

if ((iError==0)&&(!lpFileOp->fAnyOperationsAborted))

{

FillListView(hwndlv2, CurrDir, himlSmall);

if (cut)

ListView_DeleteItem(hwndlv1,index);

}

}

 

void GoTo(HWND hwndlv, char* CurrentDirectory, HIMAGELIST himlSmall)//передаётся папка до переходаб чтобы можно было откатить

{

char csText[256];

int iError;

GetWindowText(hwndEdit,csText,256);

if (csText[strlen(csText)-1]!='\\')

strcat(csText,"\\");

iError=SetCurrentDirectory(csText);

if (iError!=0)

{

strcpy(CurrentDirectory,csText);

        FillListView(hwndlv, CurrentDirectory, himlSmall);

SetWindowText(hwndEdit, CurrentDirectory);

}

else

{      

MessageBox(NULL,

             "Не удалось открыть папку",

             "Ошибка" ,

             MB_ICONERROR | MB_OK | MB_TASKMODAL);

SetWindowText(hwndEdit, CurrentDirectory);

}

}

void Activate()

{

SendMessage(hwndToolBar, TB_ENABLEBUTTON, IDI_NEW, TRUE);

SendMessage(hwndToolBar, TB_ENABLEBUTTON, IDI_COPY, TRUE);

SendMessage(hwndToolBar, TB_ENABLEBUTTON, IDI_MOVE, TRUE);

SendMessage(hwndToolBar, TB_ENABLEBUTTON, IDI_RENAME, TRUE);

SendMessage(hwndToolBar, TB_ENABLEBUTTON, IDI_DELETE, TRUE);

 

EnableMenuItem(hMenu, IDM_MKDIR, MF_ENABLED);

EnableMenuItem(hMenu, IDM_COPY, MF_ENABLED);

EnableMenuItem(hMenu, IDM_MOVE, MF_ENABLED);

EnableMenuItem(hMenu, IDM_RENAME, MF_ENABLED);

EnableMenuItem(hMenu, IDM_DELETE, MF_ENABLED);

}

void DisActivate()

{

SendMessage(hwndToolBar, TB_ENABLEBUTTON, IDI_NEW, FALSE);

SendMessage(hwndToolBar, TB_ENABLEBUTTON, IDI_COPY, FALSE);

SendMessage(hwndToolBar, TB_ENABLEBUTTON, IDI_MOVE, FALSE);

SendMessage(hwndToolBar, TB_ENABLEBUTTON, IDI_RENAME, FALSE);

SendMessage(hwndToolBar, TB_ENABLEBUTTON, IDI_DELETE, FALSE);

 

EnableMenuItem(hMenu, IDM_MKDIR, MF_GRAYED);

EnableMenuItem(hMenu, IDM_COPY, MF_GRAYED);

EnableMenuItem(hMenu, IDM_MOVE, MF_GRAYED);

EnableMenuItem(hMenu, IDM_RENAME, MF_GRAYED);

EnableMenuItem(hMenu, IDM_DELETE, MF_GRAYED);

}


Информация о работе Файловый менеджер