//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); } }