//return just folder names, seperate methods as more of it is stripped out
        public static List <MonitoredFolderItem> GetMinInfo(string path)
        {
            var result = new List <MonitoredFolderItem>();

            WIN32_FIND_DATA    findDataResult;
            FINDEX_INFO_LEVELS findInfoLevel = FINDEX_INFO_LEVELS.FindExInfoBasic;

            int additionalFlags = 0;

            if (Environment.OSVersion.Version.Major >= 6)
            {
                findInfoLevel   = FINDEX_INFO_LEVELS.FindExInfoBasic;
                additionalFlags = FIND_FIRST_EX_LARGE_FETCH;
            }

            IntPtr hFile = FindFirstFileExFromApp((@"\\?\" + path + "\\*.*"), findInfoLevel, out findDataResult, FINDEX_SEARCH_OPS.FindExSearchNameMatch, IntPtr.Zero, additionalFlags);
            var    count = 0;

            if (hFile.ToInt64() != -1)
            {
                do
                {
                    if (IsSystemItem(findDataResult.itemName))
                    {
                        continue;
                    }

                    // NOTE: This section was originally commented out when the PInvoke method was abandoned
                    MonitoredFolderItem fileitem = new MonitoredFolderItem(findDataResult.itemName);
                    result.Add(fileitem);
                    //set attributes
                    fileitem.attributes = (FileAttributes)findDataResult.itemAttributes;

                    //set parent folder
                    fileitem.ParentFolderPath = path;
                    ++count;
                } while (FindNextFile(hFile, out findDataResult));

                FindClose(hFile);
            }

            return(result);
        }
        //function
        public static List <MonitoredFolderItem> GetItems(string path)
        {
            var result = new List <MonitoredFolderItem>();

            var watch = Stopwatch.StartNew();

            WIN32_FIND_DATA    findDataResult;
            FINDEX_INFO_LEVELS findInfoLevel = FINDEX_INFO_LEVELS.FindExInfoBasic;

            int additionalFlags = 0;

            if (Environment.OSVersion.Version.Major >= 6)
            {
                findInfoLevel   = FINDEX_INFO_LEVELS.FindExInfoBasic;
                additionalFlags = FIND_FIRST_EX_LARGE_FETCH;
            }

            IntPtr hFile = FindFirstFileExFromApp(path + "\\*.*", findInfoLevel, out findDataResult, FINDEX_SEARCH_OPS.FindExSearchNameMatch, IntPtr.Zero, additionalFlags);
            var    count = 0;

            if (hFile.ToInt64() != -1)
            {
                do
                {
                    if (IsSystemItem(findDataResult.itemName))
                    {
                        continue;
                    }

                    // NOTE: This section was originally commented out when the PInvoke method was abandoned
                    MonitoredFolderItem fileitem = new MonitoredFolderItem(findDataResult.itemName);

                    //set attributes
                    fileitem.attributes = (FileAttributes)findDataResult.itemAttributes;

                    //set parent folder
                    fileitem.ParentFolderPath = path;

                    // May need to swap these around if the date is f****d
                    long datecreatedoffset = findDataResult.creationTime.dwHighDateTime;
                    datecreatedoffset    = (datecreatedoffset << 32);
                    datecreatedoffset    = datecreatedoffset | (long)(uint)findDataResult.creationTime.dwLowDateTime;
                    fileitem.DateCreated = System.DateTimeOffset.FromFileTime(datecreatedoffset);

                    //set modified time
                    long datemodifiedoffset = findDataResult.lastWriteTime.dwHighDateTime;
                    datemodifiedoffset    = (datemodifiedoffset << 32);
                    datemodifiedoffset    = datemodifiedoffset | (long)(uint)findDataResult.creationTime.dwLowDateTime;
                    fileitem.DateModified = System.DateTimeOffset.FromFileTime(datemodifiedoffset);

                    //set the size
                    fileitem.Size = (ulong)findDataResult.fileSizeHigh << 32 | (ulong)(uint)findDataResult.fileSizeLow;

                    if (((FileAttributes)findDataResult.itemAttributes & FileAttributes.Directory) == FileAttributes.Directory)
                    {
                        fileitem.IsDir = true;
                    }
                    else
                    {
                        fileitem.IsDir = false;
                    }
                    result.Add(fileitem);

                    ++count;
                } while (FindNextFile(hFile, out findDataResult));

                FindClose(hFile);
            }

            return(result);


            /// Local Functions


            bool IsSystemItem(string itemName)
            {
                if
                (
                    findDataResult.itemName == "." ||
                    findDataResult.itemName == ".."
                )
                {
                    return(true);
                }
                return(false);
            }
        }