private async Task SetFiles(string path) { _EventWaitHandle.Reset(); Task files = Task.Run(() => { lock (_fileLock) { FileCache.Clear(); if (FilterFileExtensions == null) { foreach (string i in Directory.EnumerateFiles(path).OrderByNatural(e => e, StringComparer.CurrentCulture, SortOrderFile != -1)) { FileCache.Add(Path.GetFileName(i)); } } else { foreach (string i in Directory.EnumerateFiles(path).OrderByNatural(e => e, StringComparer.CurrentCulture, SortOrderFile != -1)) { if (FilterFileExtensions.Contains(PathHelper.GetFilenameExtension(i))) { FileCache.Add(Path.GetFileName(i)); } } } } }); Task folders = Task.Run(() => { lock (_folderLock) { DirectoryCache.Clear(); foreach (string i in Directory.EnumerateDirectories(path).OrderByNatural(e => e, StringComparer.CurrentCulture, SortOrderFolder != -1)) { DirectoryCache.Add(Path.GetFileName(i)); } } }); await files; await folders; files.Dispose(); folders.Dispose(); _EventWaitHandle.Set(); }
/// <summary> /// Reads the <see cref="ImgFormat"/> using the file extension of the given string. /// </summary> /// <param name="path">The path or string.</param> /// <returns> /// The <see cref="ImgFormat"/> of the given string. /// </returns> public static ImgFormat GetImageFormatFromPath(string path) { string ext = PathHelper.GetFilenameExtension(path); if (string.IsNullOrEmpty(ext)) { return(InternalSettings.Default_Image_Format); } switch (ext) { case "png": return(ImgFormat.png); case "jpg": case "jpeg": case "jpe": case "jfif": return(ImgFormat.jpg); case "gif": return(ImgFormat.gif); case "bmp": return(ImgFormat.bmp); case "tif": case "tiff": return(ImgFormat.tif); case "wrm": case "dwrm": return(ImgFormat.wrm); case "webp": return(ImgFormat.webp); } return(ImgFormat.nil); }
private void Process_ItemRenamed(RenamedEventArgs e) { if (DirectoryCache.Remove(e.OldName)) { BinaryInsertDirectoryCache(e.Name, false); OnDirectoryRenamed(e.Name, e.OldName); return; } if (FilterFileExtensions != null) { // issue #4 -> files that are renamed are not added/removed from listview with extension filter string extOld = PathHelper.GetFilenameExtension(e.OldName); string extNew = PathHelper.GetFilenameExtension(e.Name); if (FilterFileExtensions.Contains(extOld) && !FilterFileExtensions.Contains(extNew)) { if (FileCache.Remove(e.Name)) { OnFileRemoved(e.Name); } return; } else if (!FilterFileExtensions.Contains(extOld) && FilterFileExtensions.Contains(extNew)) { if (File.Exists(e.FullPath)) { BinaryInsertFileCache(e.Name); } return; } } if (FileCache.Remove(e.OldName)) { BinaryInsertFileCache(e.Name, false); OnFileRenamed(e.Name, e.OldName); } }
private void Process(object item) { _EventWaitHandle.WaitOne(); FileSystemEventArgs e = item as FileSystemEventArgs; switch (e.ChangeType) { case WatcherChangeTypes.Changed: if (!FilterFileExtensions.Contains(PathHelper.GetFilenameExtension(e.Name))) { return; } OnItemChanged(e.Name); break; case WatcherChangeTypes.Created: if (Directory.Exists(e.FullPath)) { BinaryInsertDirectoryCache(e.Name); return; } if (!FilterFileExtensions.Contains(PathHelper.GetFilenameExtension(e.Name))) { return; } if (File.Exists(e.FullPath)) { BinaryInsertFileCache(e.Name); } break; case WatcherChangeTypes.Deleted: if (DirectoryCache.Remove(e.Name)) { OnDirectoryRemoved(e.Name); return; } if (!FilterFileExtensions.Contains(PathHelper.GetFilenameExtension(e.Name))) { return; } if (FileCache.Remove(e.Name)) { OnFileRemoved(e.Name); } break; case WatcherChangeTypes.Renamed: Process_ItemRenamed(item as RenamedEventArgs); break; } }