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

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

char ddd[1024];

strcpy(ddd,FindFullPath ("", hwndTreeView, hSelectedItem));

SetWindowText(hwndEdit, ddd);

strcpy(CurrDir1,ddd);

break;

 

}

}

else if ( hSender == hwndListView1 )  //источник - ListView1

{

switch (((NMHDR*)lParam)->code)

{

case NM_DBLCLK:

OnDblClick(hwndListView1,CurrDir1,himlSmall1);

break;

 

case NM_SETFOCUS:

SetWindowText(hwndEdit, CurrDir1);

SendMessage(hwndToolBar, TB_ENABLEBUTTON, IDI_NEW, TRUE);

if (ListView_GetSelectionMark(hwndListView1)!=-1)

Activate();

break;

 

case LVN_ITEMCHANGED:

Activate();

break;

 

case NM_KILLFOCUS:

DisActivate();

SendMessage(hwndToolBar, TB_ENABLEBUTTON, IDI_NEW, FALSE);

break;

 

case LVN_COLUMNCLICK:

NMLISTVIEW *NMLV;

NMLV = (NMLISTVIEW *) lParam;

if (CurrDir1[0]!='\0')

ListView_SortItems(hwndListView1,CompareFunc,NMLV->iSubItem);

break;

 

case LVN_ENDLABELEDIT:

if (pdi->item.pszText != NULL)

{

ListView_GetItemText(hwndListView1,ListView_GetSelectionMark(hwndListView1),0,csNameFile,90);

strcpy(csFirst,CurrDir1);

strcat(csFirst,pdi->item.pszText);

strcpy(pdi->item.pszText,csFirst);

strcpy(csFirst,CurrDir1);

strcat(csFirst,csNameFile);

strcpy(csName,csFirst);

ListView_GetItemText(hwndListView1,ListView_GetSelectionMark(hwndListView1),1,csFirst,90);

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

{

strcat(pdi->item.pszText,".");

strcat(pdi->item.pszText,csFirst);

strcat(csName,".");

strcat(csName,csFirst);

}

iError=rename(csName,pdi->item.pszText);

if (iError==0)  // --------------  EACCES

{

if (strrchr(pdi->item.pszText,'.')!=NULL)

strrchr(pdi->item.pszText,'.')[0]='\0';

pdi->item.pszText=strrchr(pdi->item.pszText,'\\');

for (int i=1;pdi->item.pszText[i-1]!='\0';i++)

pdi->item.pszText[i-1]=pdi->item.pszText[i];

ListView_SetItemText(hwndListView1,pdi->item.iItem, 0, pdi->item.pszText);

}

else

{

::MessageBox(NULL,

"Невозможно задать такое  имя папки",

"Ошибка" ,

MB_ICONERROR | MB_OK | MB_TASKMODAL);

strcpy(pdi->item.pszText,csNameFile);

}

}

break;

}

 

}

else if ( hSender == hwndListView2 )  //источник - ListView2

{

pdi = (LV_DISPINFO *)lParam;

switch (((NMHDR*)lParam)->code)

{

case NM_DBLCLK:

OnDblClick(hwndListView2,CurrDir2,himlSmall2);

break;

 

case NM_SETFOCUS:

SetWindowText(hwndEdit, CurrDir2);

SendMessage(hwndToolBar, TB_ENABLEBUTTON, IDI_NEW, TRUE);

if (ListView_GetSelectionMark(hwndListView2)!=-1)

Activate();

break;

 

case LVN_ITEMCHANGED:

Activate();

break;

 

case NM_KILLFOCUS:

DisActivate();

SendMessage(hwndToolBar, TB_ENABLEBUTTON, IDI_NEW, FALSE);

break;

 

case LVN_COLUMNCLICK:

NMLISTVIEW *NMLV2;

NMLV2 = (NMLISTVIEW *) lParam;

if (CurrDir2[0]!='\0')

ListView_SortItems(hwndListView2,CompareFunc,NMLV2->iSubItem);

break;

 

case LVN_ENDLABELEDIT:

if (pdi->item.pszText != NULL)

{

ListView_GetItemText(hwndListView2,ListView_GetSelectionMark(hwndListView2),0,csNameFile,90);

strcpy(csFirst,CurrDir2);

strcat(csFirst,pdi->item.pszText);

strcpy(pdi->item.pszText,csFirst);

strcpy(csFirst,CurrDir2);

strcat(csFirst,csNameFile);

strcpy(csName,csFirst);

ListView_GetItemText(hwndListView2,ListView_GetSelectionMark(hwndListView2),1,csFirst,90);

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

{

strcat(pdi->item.pszText,".");

strcat(pdi->item.pszText,csFirst);

strcat(csName,".");

strcat(csName,csFirst);

}

iError=rename(csName,pdi->item.pszText);

if (iError==0)  // --------------  EACCES

{

if (strrchr(pdi->item.pszText,'.')!=NULL)

strrchr(pdi->item.pszText,'.')[0]='\0';

pdi->item.pszText=strrchr(pdi->item.pszText,'\\');

for (int i=1;pdi->item.pszText[i-1]!='\0';i++)

pdi->item.pszText[i-1]=pdi->item.pszText[i];

ListView_SetItemText(hwndListView2,pdi->item.iItem, 0, pdi->item.pszText);

}

else

{

::MessageBox(NULL,

"Невозможно задать такое  имя папки",

"Ошибка" ,

MB_ICONERROR | MB_OK | MB_TASKMODAL);

strcpy(pdi->item.pszText,csNameFile);

}

}

break;

}

 

}

return 0;

break;

 

case WM_TIMER:

 

SYSTEMTIME iTime;

LPSTR timeget;

GetLocalTime(&iTime);

 

timeget = (LPSTR) GlobalAlloc(GPTR, 20);

GetTimeFormat(

LOCALE_SYSTEM_DEFAULT,              // locale

LOCALE_NOUSEROVERRIDE | TIME_FORCE24HOURFORMAT,            // options

NULL, // time

NULL,         // time format string

timeget,         // formatted string buffer

20               // size of string buffer

);

 

SendMessage(hwndStatus, SB_SETTEXT, (WPARAM) 1 | 0, (LPARAM) (LPSTR) timeget);

 

            return 0;

 

 

break;

 

case WM_DESTROY:

PostQuitMessage(0);

        break;

default:

return DefWindowProc(hwnd, message,wParam,lParam);

    }

    return 0;

}

 

LRESULT EditWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)

{

if (uMsg == WM_KEYDOWN && wParam == VK_RETURN)

{

GoTo(hwndListView1,CurrDir1,himlSmall1);

return 0;

}

else

{

return CallWindowProc(hEditProc, hWnd, uMsg, wParam, lParam);

};

};

 

void OnResize()

{

RECT r;

RECT cr;

INT piParts[2];

 

GetClientRect(mainhwnd, &cr);

 

piParts[1] = cr.right - GetSystemMetrics(SM_CXVSCROLL);

piParts[0] = piParts[1] - 80;

 

SendMessage(hwndStatus, SB_SETPARTS, 2, (LPARAM) piParts);

 

GetWindowRect(hwndToolBar, &r);

cr.top += (r.bottom - r.top);

GetWindowRect(hwndStatus, &r);

cr.bottom -= (r.bottom - r.top);

 

MoveWindow(hwndComboBox1, cr.left, cr.top, (cr.right - cr.left)/2, cr.bottom - cr.top, TRUE);

MoveWindow(hwndComboBox2, cr.left+(cr.right - cr.left)/2, cr.top, (cr.right - cr.left)/2, cr.bottom - cr.top, TRUE);

GetWindowRect(hwndComboBox1, &r);

cr.top += (r.bottom - r.top);

GetWindowRect(hwndStatus, &r);

cr.bottom -= (r.bottom - r.top);

 

MoveWindow(hwndTreeView, cr.left, cr.top, (cr.right - cr.left)/2, cr.bottom - cr.top, TRUE);

MoveWindow(hwndListView1, cr.left, cr.top, (cr.right - cr.left)/2, cr.bottom - cr.top, TRUE);

ShowWindow(hwndListView1, MyTree ? SW_HIDE : SW_SHOW);

ShowWindow(hwndTreeView, MyTree ? SW_SHOW : SW_HIDE);

MoveWindow(hwndListView2, cr.left+(cr.right - cr.left)/2, cr.top, (cr.right - cr.left)/2, cr.bottom - cr.top, TRUE);

MoveWindow(hwndEdit,cr.left+2, cr.bottom, cr.right - cr.left-2, 20,TRUE);

};

 

//помещает имена дисков в  ComboBox-ы

void DiskBrows()

{

DWORD    dwDisks;

TV_INSERTSTRUCT  TV_InsertStruct;

TV_ITEM    TV_Item;

dwDisks = GetLogicalDrives ();  //получаем информацию о дисках

TV_InsertStruct.hInsertAfter = TVI_SORT; //тип вставки - в алфавитном порядке

TV_Item.mask = TVIF_TEXT;  //информация содержится в полях pszText и cchTextMax

for (int i = 0; i< 26; i++)   //26 возможных логических дисков

{

 

if ( dwDisks & FlagDisk[i].dwFlag ) 

{

SendMessage(hwndComboBox1, CB_ADDSTRING,

                        0, (LPARAM) FlagDisk[i].cDisk

);

SendMessage(hwndComboBox2, CB_ADDSTRING,

                        0, (LPARAM) FlagDisk[i].cDisk

);

}

}

}

//////////////////////////////////////

////////Процедуры для TreeView////////

//////////////////////////////////////

void CreateFoldersOnDisk(HWND hwnd)

{

TV_INSERTSTRUCT  TV_InsertStruct;

TV_ITEM    TV_Item;

DWORD    dwDisks;  //информация о дисках в системе

WIN32_FIND_DATA  FileData; //данные о найденных файлах

HANDLE    FileHandle; //хэндл найденных файлов

char    FileName[260]; //имя файла

 

SendMessage(hwndTreeView,TVM_DELETEITEM, 0, (LPARAM) (HTREEITEM) TVI_ROOT);

 

 

dwDisks = GetLogicalDrives ();  //получаем информацию о дисках

TV_InsertStruct.hInsertAfter = TVI_SORT; //тип вставки - в алфавитном порядке

TV_Item.mask = TVIF_TEXT | TVIF_IMAGE;  //информация содержится в полях pszText и cchTextMax

TV_InsertStruct.hParent = TVI_ROOT;  //вставляем в корень

 

TV_Item.pszText = CurentDiskName; //название диска

TV_Item.cchTextMax = lstrlen(CurentDiskName);

TV_Item.iImage=(1);

TV_Item.iSelectedImage = (0); 

TV_InsertStruct.item = TV_Item;   //структура для вставки

 

TV_InsertStruct.hParent = TreeView_InsertItem(hwndTreeView, &TV_InsertStruct);  //устанавливаем родителем элемента самого себя, чтобы вставлять на следующий уровень

 

char cCurrDir[4];

 

lstrcpy (cCurrDir, CurentDiskName);//создаём имя корневой директории

 

 

if ( !SetCurrentDirectory ( cCurrDir ) ) //устанавливаем текущий диск

{

MessageBox(hwnd, "Cannot set current directory!", "Error", MB_OK);

}

 

FileHandle = FindFirstFile ("*", &FileData); //ищем все файлы в текущей директории

 

if ( FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )

{

lstrcpy(FileName, FileData.cFileName);

TV_Item.mask = TVIF_TEXT | TVIF_IMAGE;  //информация содержится в полях pszText и cchTextMax

TV_Item.pszText = FileName;   //текст для вставки

TV_Item.cchTextMax = lstrlen(FileName);

TV_Item.iImage=(1);

TV_Item.iSelectedImage = (0);

TV_InsertStruct.item = TV_Item;  //структура для вставки

 

TreeView_InsertItem(hwndTreeView, &TV_InsertStruct);

}

 

while ( FindNextFile(FileHandle, &FileData) ) //продолжаем поиск

{

if ( FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )

{

lstrcpy(FileName, FileData.cFileName);

TV_Item.mask = TVIF_TEXT | TVIF_IMAGE;  //информация содержится в полях pszText и cchTextMax

TV_Item.pszText = FileName;   //текст для вставки

TV_Item.cchTextMax = lstrlen(FileName);

TV_Item.iImage=(1);

TV_Item.iSelectedImage = (0);

TV_InsertStruct.item = TV_Item;  //структура для вставки

 

TreeView_InsertItem(hwndTreeView, &TV_InsertStruct);

}

}

};

 

LPSTR FindFullPath (LPSTR strDrive, HWND hwndTreeView, HTREEITEM htreeItem)

{

char CurrText[200];

char ParentText[200];

TV_ITEM TV_Item;

 

TV_Item.mask = TVIF_HANDLE | TVIF_TEXT | TVIF_IMAGE;

TV_Item.hItem = htreeItem;

TV_Item.pszText = CurrText;

TV_Item.cchTextMax = 99;

TV_Item.iImage=(1);

TV_Item.iSelectedImage = (0);

TreeView_GetItem(hwndTreeView, &TV_Item);

 

for (int i = 0; i < 26; i++)

{

if ( lstrcmp (CurrText, FlagDisk[i].cDisk ) == 0 )

return CurrText;

 

}

 

char cTemp[200];

 

lstrcpyn (cTemp, CurrText, 2);

lstrcat (cTemp, '\0');

 

if (lstrcmp( cTemp, "\\") != 0 ) //если выбран файл, то добавляем слэш в начало

{

lstrcpy(cTemp, "\\");

lstrcat(cTemp, CurrText);

lstrcpy(CurrText, cTemp);

}

 

TV_Item.pszText = ParentText;

TV_Item.hItem = TreeView_GetParent(hwndTreeView, TV_Item.hItem);

TV_Item.iImage=(1);

TV_Item.iSelectedImage = (0);

TreeView_GetItem(hwndTreeView, &TV_Item);

 

lstrcat(FindFullPath(CurrText, hwndTreeView, TV_Item.hItem), CurrText);

}

 

bool AddChildren (HWND hwndTreeView, HTREEITEM hTreeItem, LPCSTR ParentDir )

{

char    cCurrDir[1000];  //текущий путь

char    FileName[1000];  //имя файла

char    tmpParentDir[1000];

WIN32_FIND_DATA  FileData;   //данные о найденных файлах

HANDLE    FileHandle;   //хэндл найденных файлов

TV_INSERTSTRUCT  TV_InsertStruct; //структура для вставки

TV_ITEM    TV_Item;   //содержимое вставляемого элемента

 

lstrcpy(tmpParentDir, ParentDir);

 

for (int i = 0; i < 26; i++)

{

if ( lstrcmp(tmpParentDir, FlagDisk[i].cDisk) == 0 )

{

lstrcat (tmpParentDir, "\\");  //создаём имя корневой директории

}

}

 

lstrcpy( cCurrDir,  FindFullPath (tmpParentDir, hwndTreeView, hTreeItem) );

 

if ( !SetCurrentDirectory ( cCurrDir ) ) //устанавливаем текущую директорию

return false;

 

FileHandle = FindFirstFile ("*", &FileData); //ищем все файлы в текущей директории

 

if ( FileHandle == INVALID_HANDLE_VALUE ) //текущая директоря пустая

return true;

 

if ( FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) //если файл является директорией

{

lstrcpy(FileName, FileData.cFileName);

TV_InsertStruct.hInsertAfter = TVI_SORT; //тип вставки - в алфавитном порядке

TV_InsertStruct.hParent = hTreeItem;  //элемент, который будет являться родителем вставляемых элементов

TV_Item.mask = TVIF_TEXT | TVIF_IMAGE;   //информация содержится в полях pszText и cchTextMax

 

if ( (lstrcmp(FileName, ".") != 0) && (lstrcmp(FileName, "..") != 0))

{  

TV_Item.pszText = FileName;   //текст для вставки

TV_Item.cchTextMax = lstrlen(FileName);

TV_Item.iImage=(1);

TV_Item.iSelectedImage = (0);

TV_InsertStruct.item = TV_Item;  //структура для вставки

TreeView_InsertItem(hwndTreeView, &TV_InsertStruct);

}

}

while ( FindNextFile(FileHandle, &FileData) ) //продолжаем поиск

{

if ( FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) //если файл является директорией

{

lstrcpy(FileName, FileData.cFileName);

 

TV_InsertStruct.hInsertAfter = TVI_SORT; //тип вставки - в алфавитном порядке

TV_InsertStruct.hParent = hTreeItem;  //элемент, который будет являться родителем вставляемых элементов

TV_Item.mask = TVIF_TEXT | TVIF_IMAGE;   //информация содержится в полях pszText и cchTextMax

 

if ( lstrcmp(FileName, ".") != 0 && lstrcmp(FileName, "..") != 0)

{

TV_Item.pszText = FileName;   //текст для вставки

TV_Item.cchTextMax = lstrlen(FileName);

TV_Item.iImage=(1);

TV_Item.iSelectedImage = (0);    

TV_InsertStruct.item = TV_Item;  //структура для вставки

TreeView_InsertItem(hwndTreeView, &TV_InsertStruct);

}

}

}

 

FindClose (FileHandle);

return true;

}

 

bool DelChildren (HWND hwndTreeView, HTREEITEM hTreeItem)

{

HTREEITEM   hItem;

 

hItem = TreeView_GetChild(hwndTreeView, hTreeItem);  //берём потомка

 

if ( !hItem && !hTreeItem) //нет потомков

return false;

 

while ( hItem ) //пока не удалим всех потомков

{

TreeView_DeleteItem(hwndTreeView, hItem);

hItem = TreeView_GetChild(hwndTreeView, hTreeItem);  //берём потомка

}

return true;

}

 

bool CollapseChildren(HWND hwndTreeView, HTREEITEM hTreeItem)

{

HTREEITEM hItem;

 

hItem = TreeView_GetChild(hwndTreeView, hTreeItem);  //берём потомка

if ( hItem )

CollapseChildren(hwndTreeView, hItem);

 

TreeView_Expand(hwndTreeView, hItem, TVE_COLLAPSE );

 

hItem = TreeView_GetNextSibling(hwndTreeView, hTreeItem);  //берём потомка

if ( hItem )

CollapseChildren(hwndTreeView, hItem);

 

TreeView_Expand(hwndTreeView, hItem, TVE_COLLAPSE );

 

return true;

}

////////////////////////////////////////////////////////

/////////Процедуры для ListView/////////////////////////

////////////////////////////////////////////////////////

 

 

 

void FillListView(HWND hwndlv, LPCSTR ParentDir, HIMAGELIST himlSmall)

{

    WIN32_FIND_DATA FileData;

char DirName[1024];

    SHFILEINFO fi;

    HICON hIcon;

 

int count = ListView_GetItemCount(hwndlv);

for (int i = 0; i < count; i++)

{

LVITEM lvi;

lvi.mask = LVIF_PARAM;

lvi.iItem = i;

lvi.iSubItem = 0;

ListView_GetItem(hwndlv, &lvi);

delete (void*)lvi.lParam;

};

 

    SendMessage(hwndlv,LVM_DELETEALLITEMS,0l,0);

 

    SetCurrentDirectory(ParentDir);

ImageList_SetImageCount(himlSmall,3);

HANDLE hFile = FindFirstFile("*", &FileData);

    LV_ITEM item;

int d=0;

 

DisActivate();

  if (hFile != INVALID_HANDLE_VALUE)

  {

    SendMessage(hwndStatus, SB_SETTEXT, (WPARAM) 0, (LPARAM) "Scanning directory structure..." ); //отображаем в строке состояния процесс поиска

item.iItem = 0;

// Вставляем строки

 

    char csText[256];

char csCopyText[256];

    SYSTEMTIME stTime;

 

do

    {

WIN32_FIND_DATA * pData = new WIN32_FIND_DATA;

*pData = FileData;

item.mask = LVIF_IMAGE | LVIF_TEXT | LVIF_PARAM;

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

{

//////////////////item0/////////////////////

            item.iSubItem = 0;

if (FileData.dwFileAttributes &   FILE_ATTRIBUTE_DIRECTORY)

            {

item.pszText = FileData.cFileName;

strcpy(DirName, ParentDir);

strcat(DirName, FileData.cFileName);

strcat(DirName,"\\");

if (GetFolderSize(DirName)<1450000)

{

 

item.iImage=a;

}

else

item.iImage=b;

SetCurrentDirectory(ParentDir);   

}

else

{

SHGetFileInfo(FileData.cFileName,0,&fi, sizeof(SHFILEINFO),SHGFI_ICON|SHGFI_SMALLICON); 

d = ImageList_AddIcon(himlSmall, fi.hIcon);

DestroyIcon(hIcon);

if (strrchr(FileData.cFileName,'.')!=NULL)

{

strcpy(csCopyText,FileData.cFileName);

strrchr(csCopyText,'.')[0]='\0';

item.pszText = csCopyText;

}

else

item.pszText = FileData.cFileName;

item.iImage=d;

 

}

 

 

item.lParam = (LPARAM)pData;

ListView_InsertItem(hwndlv, &item);

 

//////////////////item1/////////////////////

            item.iSubItem = 1;

item.mask = LVIF_TEXT;

            if (FileData.dwFileAttributes &   FILE_ATTRIBUTE_DIRECTORY)

strcpy(csText,"<DIR>");

    else

            {

if(strchr(FileData.cFileName,'.')==NULL)

{

strcpy(csText,"<?>");

}

                else

                    strcpy(csText,strrchr(FileData.cFileName,'.')+1);

            }

item.pszText = (LPTSTR)(LPCTSTR)csText;

ListView_SetItem(hwndlv, &item);

//////////////////item2/////////////////////

item.iSubItem = 2;

if (FileData.dwFileAttributes &  FILE_ATTRIBUTE_DIRECTORY)

strcpy(csText,"");

else

if (FileData.nFileSizeLow<1024)

wsprintf(csText,"%d b",FileData.nFileSizeLow);

else

wsprintf(csText,"%d Kb",FileData.nFileSizeLow/1024);

item.pszText = (LPTSTR)(LPCTSTR)csText;

ListView_SetItem(hwndlv, &item);

//////////////////item3/////////////////////

item.iSubItem = 3;

FILETIME ft=FileData.ftLastWriteTime;

FileTimeToLocalFileTime(&ft,&ft);

FileTimeToSystemTime(&ft,&stTime);

wsprintf(csText,

       "%02d.%02d.%04d %02d:%02d",stTime.wDay,stTime.wMonth,stTime.wYear,

                   stTime.wHour,stTime.wMinute);

item.pszText = (LPTSTR)(LPCTSTR)csText;

ListView_SetItem(hwndlv, &item);

item.iItem++;

}

if (lstrcmp(FileData.cFileName,"..")==0)

{

item.iSubItem = 0;

item.iImage=c;

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