override protected bool ReleaseHandle()
 {
     return(Win32Native.FindClose(handle));
 }
Example #2
0
        public DirectoryInfo[] GetDirectories(string SearchPattern, bool includeHidden = true)
        {
            List <DirectoryInfo> dirs = new List <DirectoryInfo>();

            if (Settings.IsUnix)
            {
                System.IO.DirectoryInfo   di    = new System.IO.DirectoryInfo(FullName);
                System.IO.DirectoryInfo[] arrDi = di.GetDirectories(SearchPattern);
                foreach (System.IO.DirectoryInfo tDi in arrDi)
                {
                    DirectoryInfo lDi = new DirectoryInfo
                    {
                        Name          = tDi.Name,
                        FullName      = Path.Combine(FullName, tDi.Name),
                        LastWriteTime = tDi.LastWriteTimeUtc.Ticks
                    };
                    dirs.Add(lDi);
                }
                return(dirs.ToArray());
            }



            string dirName = NameFix.AddLongPathPrefix(FullName);

            Win32Native.WIN32_FIND_DATA findData = new Win32Native.WIN32_FIND_DATA();
            SafeFindHandle findHandle            = Win32Native.FindFirstFile(dirName + @"\" + SearchPattern, findData);

            if (!findHandle.IsInvalid)
            {
                do
                {
                    string currentFileName = findData.cFileName;

                    // if this is a directory, find its contents
                    if ((findData.dwFileAttributes & Win32Native.FILE_ATTRIBUTE_DIRECTORY) == 0)
                    {
                        continue;
                    }
                    if (currentFileName == "." || currentFileName == "..")
                    {
                        continue;
                    }
                    if (!includeHidden && (findData.dwFileAttributes & Win32Native.FILE_ATTRIBUTE_HIDDEN) != 0)
                    {
                        continue;
                    }

                    DirectoryInfo di = new DirectoryInfo
                    {
                        Name          = currentFileName,
                        FullName      = Path.Combine(FullName, currentFileName),
                        LastWriteTime = Convert.Time(findData.ftLastWriteTimeHigh, findData.ftLastWriteTimeLow)
                    };
                    dirs.Add(di);
                }while (Win32Native.FindNextFile(findHandle, findData));
            }

            // close the find handle
            findHandle.Dispose();

            return(dirs.ToArray());
        }