Example #1
0
        /// <summary>
        /// AddProgramsInDirectory - Recursive function to search
        /// into directory tree.
        /// </summary>
        /// <param name="strDir">Starting directory</param>
        /// <returns></returns>
        private bool AddProgramsInDirectory(string strDir)
        {
            Trace.WriteLine("FindPrograms: " +
                            "AddProgramsInDirectory (" + strDir + ")");

            // Update status bar through delegate function.
            strBuffer = "Searching in " + strDir + "...";
            itReason  = INVOKE_FINDFILES.STATUS_MESSAGE;
            m_ctlInvokeTarget.Invoke(m_deleCallback);

            // As we add programs, store directory names.
            ArrayList alDirectories = new ArrayList();

            Rapi.CE_FIND_DATA fd = new Rapi.CE_FIND_DATA();

            // Start our search.
            string strSearch = strDir + "*.*";
            IntPtr hff       = Rapi.CeFindFirstFile(strSearch, ref fd);

            if ((int)hff == -1)
            {
                FetchAndDisplayError();
            }
            else
            {
                do
                {
                    string strFileName = fd.cFileName;
                    int    iFlag       = (int)
                                         Rapi.FILE_ATTRIBUTE.FILE_ATTRIBUTE_DIRECTORY;
                    if ((fd.dwFileAttributes & iFlag) == iFlag)
                    {
                        alDirectories.Add(strDir + fd.cFileName);
                    }
                    else
                    {
                        if (strFileName.EndsWith(".EXE") ||
                            strFileName.EndsWith(".exe"))
                        {
                            m_cFiles++;

                            strBuffer = strDir + fd.cFileName;
                            itReason  = INVOKE_FINDFILES.FINDFILE_NEWFILE;
                            m_ctlInvokeTarget.Invoke(m_deleCallback);
                        }
                    }
                } while (bThreadContinue &&
                         Rapi.CeFindNextFile(hff, ref fd) != 0);

                if (bThreadContinue && m_bIncludeSubDirs)
                {
                    foreach (string str in alDirectories)
                    {
                        AddProgramsInDirectory(str + "\\");
                    }
                }
            }

            Rapi.CeFindClose(hff);

            return(true);
        }