Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2010, 20:38   #1
sputnick
Пользователь
 
Регистрация: 09.05.2010
Сообщений: 12
По умолчанию Простейший файловый менеджер на MFC

Всем привет!!!
Народ помогите, задали в универе сделать простейший файловый менеджер на MFC, достаточно будет только навигация по файловой системе. Вообще пишу на шарпе, вкусил MFC и ошизел ((((

появилось несколько вопросов:

1) через раз при билде вылазит ошибка - Error 1 fatal error LNK1000: Internal error during IncrBuildImage FileMan FileMan
тупо запускаешь еще раз на выполнение и запускается, че это за фигня??

2) получаю список дисков так:

Код:
TCHAR buf[100];
DWORD len = GetLogicalDriveStrings(sizeof(buf)/sizeof(TCHAR),buf);
for(TCHAR*p=buf;*p!=0;p+=4)
{
m_combo.AddString(p);
}
m_combo.SetWindowText( _T("C:\\") );
по идее сканирование диска надо вешать на OnCbnEditchangeComboDisks но на нем не работает, пробовал OnCbnCloseupComboDisks и OnCbnSelchangeComboDisks на них сканирует, но если 2 раза выбрать диск.
если тип комбобокса выбрать DropList то подписавшись на событие OnCbnSelchangeComboDisks все работает, но DropList не подходит, так как надо чтоб выбранный диск отображался на ComboDisks. (((((

3) Просто просканировать диск и заполнить папками триивью получается, а мне нужно еще проверить нет ли в папке подпапки и если есть, создать фиктивный узел в триивью, делаю так:

Код:
//СКАНИРОВАНИЕ ДИСКА
CFileFind m_finder; 

CString szFavorite_path("C:\\"),
RootPath ("C:\\"); 

BOOL bWorking,
bWorkingSub;

DWORD dwAttr = GetFileAttributes(szFavorite_path); 

if(dwAttr == 0xffffffff) 
{ 
DWORD dwError = GetLastError(); 

if(dwError == ERROR_FILE_NOT_FOUND) 
{ 
//MessageBox("Not Found", "Error", MB_OK); 
} 
} 
else 
{ 
bWorking = m_finder.FindFile(szFavorite_path += "*.*"); 

while (bWorking) 
{ 
bWorking = m_finder.FindNextFile(); 

if (m_finder.IsDirectory()) //! && //каталоги нам надо тоже !m_finder.IsDots()
{ 
CString m_FileName = m_finder.GetFileName(); 

//ПРОВЕРИМ ИМЕЕТ ЛИ ТЕКУЩИЙ КАТАЛОГ ПОДКАТАЛОГ
bWorkingSub = m_finder.FindFile(RootPath += m_FileName += "\\*.*");
if (m_finder.IsDirectory())//если у текущего каталога есть подкаталог, добавим фиктивный подузел, чтобы каталог был с //плюсом (признак того что есть подкаталог)
{ 
CString fikt(TEXT("fikt"));
HTREEITEM h1 = m_treeFileIO.InsertItem(m_FileName);
HTREEITEM h2 = m_treeFileIO.InsertItem(fikt, h1);

}
else //если текущий каталог не имеет подкаталога, идем дальше
{
m_treeFileIO.InsertItem(m_FileName);
}


}
}
вроде все правильно, но при выполнении вылазит эта ошибка:
debug assertion faild
sputnick вне форума Ответить с цитированием
Старый 10.05.2010, 08:14   #2
sputnick
Пользователь
 
Регистрация: 09.05.2010
Сообщений: 12
По умолчанию

посидел с утра покумекал, данный этап получился:

Код:
//СКАНИРОВАНИЕ ДИСКА
CFileFind  m_finder; 

CString    szFavorite_path("C:\\"),
	       RootPath ("C:\\"); 

BOOL       bWorking;
		   
	 
DWORD dwAttr = GetFileAttributes(szFavorite_path);  
  
	if(dwAttr ==    0xffffffff)  
	{  
		DWORD dwError = GetLastError();  
  
		if(dwError == ERROR_FILE_NOT_FOUND)  
		{  
			MessageBox(CString("Not Found"), CString("Error"), MB_OK);  
		}  
	}	  
    else  
	{  
	 bWorking = m_finder.FindFile(szFavorite_path += "*.*");  
  		
   	while  (bWorking)  
	{  		
		bWorking = m_finder.FindNextFile();  
  
		if (m_finder.IsDirectory()) //! && //каталоги нам надо тоже !m_finder.IsDots()
		{  
			CString m_FileName = m_finder.GetFileName(); 

			//ПРОВЕРИМ ИМЕЕТ ЛИ ТЕКУЩИЙ КАТАЛОГ ПОДКАТАЛОГ
			CFileFind  m_Subfinder;
			CString m_FileNameSub;
			BOOL bWorkingSub;

			m_FileNameSub+= m_FileName + CString("\\*.*");			
			bWorkingSub = m_Subfinder.FindFile(RootPath + m_FileNameSub);
			MessageBox(RootPath, CString("Error"), MB_OK); 
			while  (bWorkingSub)  
				{  		
					bWorkingSub = m_Subfinder.FindNextFile();

			    	if (m_Subfinder.IsDirectory())//если у текущего каталога есть подкаталог, добавим фиктивный подузел, чтобы каталог был с плюсом (признак того что есть подкаталог)
				   {					
					CString fikt(TEXT("fikt"));
					HTREEITEM h1 = m_treeFileIO.InsertItem(m_FileName);
					HTREEITEM h2 = m_treeFileIO.InsertItem(fikt, h1);
					goto next;
				   }
				   else //если текущий каталог не имеет подкаталога, идем дальше
				   {
					
					goto AddAndNext;
				   }
					
				}//while  (bWorkingSub)

		AddAndNext:;
		m_treeFileIO.InsertItem(m_FileName);
		next:;
		}//if

	} //while

  } //else
sputnick вне форума Ответить с цитированием
Старый 10.05.2010, 21:48   #3
sputnick
Пользователь
 
Регистрация: 09.05.2010
Сообщений: 12
По умолчанию

народ хелп, никак не могу догнать как седлать следующее:
мой тривью инициирован корневыми папками, если в папке есть подпапка, я создаю фиктивную папку, чтоб корневая папка была с плюсом (чтоб визуально было понятно, что папка содержит подпапку).

Далее мне необходимо при разворачивании узла (нажатии на плюс) сканировать папку которую разворачиваем, вот тут затык, я не могу понять как заполнять найденными папками именно папку которую разворачиваю, как то ее индекс вычислять, или как????
sputnick вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Файловый менеджер Яр|/||< (^_^) Общие вопросы Delphi 4 16.10.2011 00:55
Файловый менеджер akosh12345 Общие вопросы Delphi 12 11.05.2010 21:55
Файловый менеджер на C sht0p0r Помощь студентам 3 07.12.2008 16:47
файловый менеджер greyshadow Общие вопросы Delphi 3 16.09.2007 19:23