Автор: Пользователь скрыл имя, 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
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,"..")
{
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(
ListView_GetItemText(hwndlv,
if (strcmp(csName,csSDir)==0)
{
ListView_GetItemText(hwndlv,
if (strcmp(csName,"..") != 0)
{
//открываем подпапку
strcpy(csCopy,
strcat(csCopy,csName);
strcat(csCopy,"\\");
strcpy(CurrentDirectory,
}
else
{
//возвращаемся на уровень выше
char* rez;
int irez;
CurrentDirectory[strlen(
rez = strrchr(CurrentDirectory,'\\')
irez=rez-CurrentDirectory+1;
CurrentDirectory[irez]=0;
}
iError=SetCurrentDirectory(
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,
strcpy(csCopy,
strcat(csCopy,csName);
strcat(csCopy,".");
ListView_GetItemText(hwndlv,
strcat(csCopy,csName);
ShellExecute(mainhwnd,NULL,
}
}
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,"..
rez = -1;
else
if (lstrcmpi(item2->cFileName,"..
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,"..
rez = -1;
else
if (lstrcmpi(item2->cFileName,"..
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,"..
rez = -1;
else
if (lstrcmpi(item2->cFileName,"..
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,"..
rez = -1;
else
if (lstrcmpi(item2->cFileName,"..
rez = 1;
else
if ((item1->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) &&
(item2->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
rez = CompareFileTime(&item1->
else
{
if (item1->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
rez = -1;
else
if (item2->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
rez = 1;
else
rez = CompareFileTime(&item1->
}
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==
{
iError=CreateDirectory(csN2,
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],
int iError;
SHFILEOPSTRUCT *lpFileOp;
ListView_GetItemText(hwndlv,
ListView_GetItemText(hwndlv,
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_
iError=SHFileOperation(
if ((iError==0)&&(lpFileOp->
{
if (strcmp(CurrDir1,CurrDir2)==0)
{
FillListView(hwndListView1, CurrDir1, himlSmall1);
FillListView(hwndListView2, CurrDir2, himlSmall2);
}
else
ListView_DeleteItem(hwndlv,
}
}
void Renamefile(HWND hwndlv)
{
ListView_EditLabel(hwndlv,
}
void CopyFile(HWND hwndlv1, HWND hwndlv2, LPCSTR CurrD1, LPCSTR CurrD2, HIMAGELIST himlSmall)
{
char csName[256],csFirst[256],
char csNF[90];
ListView_GetItemText(hwndlv1,
ListView_GetItemText(hwndlv1,
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],
char csNF[90];
int index;
ListView_GetItemText(hwndlv1,
ListView_GetItemText(hwndlv1,
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_
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],
SHFILEOPSTRUCT *lpFileOp;
int iError;
strcpy(csNameFile,CurrDir);
strcat(csNameFile,csNF);
csNameFile[strlen(csNameFile)+
lpFileOp=new(SHFILEOPSTRUCT);
lpFileOp->hwnd=mainhwnd;
lpFileOp->pFrom=
lpFileOp->pTo=csNameFile;
lpFileOp->fFlags= FOF_ALLOWUNDO;
if (cut)
lpFileOp->wFunc=FO_MOVE;
else
lpFileOp->wFunc=FO_COPY;
iError=SHFileOperation(
if ((iError==0)&&(!lpFileOp->
{
FillListView(hwndlv2, CurrDir, himlSmall);
if (cut)
ListView_DeleteItem(hwndlv1,
}
}
void GoTo(HWND hwndlv, char* CurrentDirectory, HIMAGELIST himlSmall)//передаётся папка до переходаб чтобы можно было откатить
{
char csText[256];
int iError;
GetWindowText(hwndEdit,csText,
if (csText[strlen(csText)-1]!='\\
strcat(csText,"\\");
iError=SetCurrentDirectory(
if (iError!=0)
{
strcpy(CurrentDirectory,
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);
}