public MusicInfo(FileInfoEx file) { UniqueId = Guid.NewGuid(); if (!file.Exists) throw new FileNotFoundException("File not found: " + file.FullName); FilePath = file.FullName; GetInfoFromTag(); }
public static void AttachPreview(IntPtr handler, FileInfoEx file, Rectangle viewRect) { if (pHandler != null) { pHandler.Unload(); } string fileName = file.FullName; string CLSID = "8895b1c6-b41f-4c1c-a562-0d564250836f"; Guid g = new Guid(CLSID); string[] exts = fileName.Split('.'); string ext = exts[exts.Length - 1]; using (RegistryKey hk = Registry.ClassesRoot.OpenSubKey(string.Format(@".{0}\ShellEx\{1:B}", ext, g))) { if (hk != null) { g = new Guid(hk.GetValue("").ToString()); Type a = Type.GetTypeFromCLSID(g, true); object o = Activator.CreateInstance(a); IInitializeWithFile fileInit = o as IInitializeWithFile; IInitializeWithStream streamInit = o as IInitializeWithStream; bool isInitialized = false; if (fileInit != null) { fileInit.Initialize(fileName, 0); isInitialized = true; } else if (streamInit != null) { FileStreamEx stream = file.OpenRead(); //COMStream stream = new COMStream(File.Open(fileName, FileMode.Open)); streamInit.Initialize((IStream)streamInit, 0); isInitialized = true; } if (isInitialized) { pHandler = o as IPreviewHandler; if (pHandler != null) { ShellAPI.RECT r = new ShellAPI.RECT(viewRect); pHandler.SetWindow(handler, ref r); pHandler.SetRect(ref r); pHandler.DoPreview(); } } } } }
public static MusicInfo Create(FileInfoEx file, Action<Exception, string> errorCallback) { try { return new MusicInfo(file); } catch (Exception ex) { errorCallback(ex, file.FullName); return null; } }
public bool GetPlaylistFiles(string path, out IEnumerable<string> entries) { try { var dir = new FileInfoEx(path).DirectoryName.TrimEnd('\\'); entries = new List<string>(from f in FileEx.ReadAllLines(path) where !string.IsNullOrWhiteSpace(f) && !f.StartsWith("#EXT") select f[1] == ':' || f.StartsWith("\\\\") ? f : (dir + "\\" + f)); return true; } catch { entries = null; return false; } }
public static FileSystemInfoEx ResolveSymLink(this FileSystemInfoEx info) { var path = info.FullName; string directory = Path.GetDirectoryName(path); string file = Path.GetFileName(path); Shell32.Shell shell = new Shell32.Shell(); Shell32.Folder folder = shell.NameSpace(directory); Shell32.FolderItem folderItem = folder.ParseName(file); Shell32.ShellLinkObject link = (Shell32.ShellLinkObject)folderItem.GetLink; FileSystemInfoEx ret = null; if (Path.GetDirectoryName(link.Path) == link.Path) { ret = new DirectoryInfoEx(link.Path); } else { ret = new FileInfoEx(link.Path); } return(ret); }
public static FileModel FromExEntry(FileInfoEx entry) { return new FileModel(entry as FileInfoEx); }
public FileModel(FileInfoEx file) : base(file) { this._length = file.Length; }
//0.17: Added DirectoryInfoEx.EnumerateFiles/EnumerateDirectories/EnumerateFileSystemInfos() methods which work similar as the one in .Net4 public IEnumerable <FileInfoEx> EnumerateFiles(String searchPattern, SearchOption searchOption, CancelDelegate cancel) { IntPtr ptrEnum = IntPtr.Zero; IEnumIDList IEnum = null; PIDL parentPIDL = this.PIDL; using (ShellFolder2 sf = this.ShellFolder) try { if (sf.EnumObjects(IntPtr.Zero, flag, out ptrEnum) == ShellAPI.S_OK) { IEnum = (IEnumIDList)Marshal.GetTypedObjectForIUnknown(ptrEnum, typeof(IEnumIDList)); IntPtr pidlSubItem; int celtFetched; while (!IOTools.IsCancelTriggered(cancel) && IEnum.Next(1, out pidlSubItem, out celtFetched) == ShellAPI.S_OK && celtFetched == 1) { ShellAPI.SFGAO attribs = ShellAPI.SFGAO.FOLDER | ShellAPI.SFGAO.FILESYSTEM | ShellAPI.SFGAO.STREAM; sf.GetAttributesOf(1, new IntPtr[] { pidlSubItem }, ref attribs); //http://www.eggheadcafe.com/aspnet_answers/platformsdkshell/Mar2006/post26165601.asp bool isZip = ((attribs & ShellAPI.SFGAO.FOLDER) != 0 && (attribs & ShellAPI.SFGAO.STREAM) != 0); bool isDir = ((attribs & ShellAPI.SFGAO.FOLDER) != 0); if (isZip || !isDir) { PIDL subRelPidl = new PIDL(pidlSubItem, false); //FileInfoEx fi = new FileInfoEx(sf, this, subRelPidl); FileInfoEx fi = new FileInfoEx(sf, parentPIDL, subRelPidl); if (IOTools.MatchFileMask(fi.Name, searchPattern)) { yield return(fi); } //0.18: Fixed DirectoryInfoEx.EnumerateFiles, SearchPattern is ignored. } } if (searchOption == SearchOption.AllDirectories) { IEnumerator <DirectoryInfoEx> dirEnumerator = EnumerateDirectories("*", SearchOption.TopDirectoryOnly, cancel).GetEnumerator(); while (!IOTools.IsCancelTriggered(cancel) && dirEnumerator.MoveNext()) { IEnumerator <FileInfoEx> fileEnumerator = dirEnumerator.Current.EnumerateFiles(searchPattern, searchOption, cancel).GetEnumerator(); while (fileEnumerator.MoveNext()) { //Debug.Assert(!fileEnumerator.Current.IsFolder); yield return(fileEnumerator.Current); } } } } } finally { if (parentPIDL != null) { parentPIDL.Free(); parentPIDL = null; } if (IEnum != null) { Marshal.ReleaseComObject(IEnum); Marshal.Release(ptrEnum); } } }
//0.17: Added DirectoryInfoEx.EnumerateFiles/EnumerateDirectories/EnumerateFileSystemInfos() methods which work similar as the one in .Net4 public IEnumerable<FileInfoEx> EnumerateFiles(String searchPattern, SearchOption searchOption, CancelDelegate cancel) { IntPtr ptrEnum = IntPtr.Zero; IEnumIDList IEnum = null; PIDL parentPIDL = this.PIDL; using (ShellFolder2 sf = this.ShellFolder) try { if (sf.EnumObjects(IntPtr.Zero, flag, out ptrEnum) == ShellAPI.S_OK) { IEnum = (IEnumIDList)Marshal.GetTypedObjectForIUnknown(ptrEnum, typeof(IEnumIDList)); IntPtr pidlSubItem; int celtFetched; while (!IOTools.IsCancelTriggered(cancel) && IEnum.Next(1, out pidlSubItem, out celtFetched) == ShellAPI.S_OK && celtFetched == 1) { ShellAPI.SFGAO attribs = ShellAPI.SFGAO.FOLDER | ShellAPI.SFGAO.FILESYSTEM | ShellAPI.SFGAO.STREAM; sf.GetAttributesOf(1, new IntPtr[] { pidlSubItem }, ref attribs); //http://www.eggheadcafe.com/aspnet_answers/platformsdkshell/Mar2006/post26165601.asp bool isZip = ((attribs & ShellAPI.SFGAO.FOLDER) != 0 && (attribs & ShellAPI.SFGAO.STREAM) != 0); bool isDir = ((attribs & ShellAPI.SFGAO.FOLDER) != 0); if (isZip || !isDir) { PIDL subRelPidl = new PIDL(pidlSubItem, false); //FileInfoEx fi = new FileInfoEx(sf, this, subRelPidl); FileInfoEx fi = new FileInfoEx(sf, parentPIDL, subRelPidl); if (IOTools.MatchFileMask(fi.Name, searchPattern)) yield return fi; //0.18: Fixed DirectoryInfoEx.EnumerateFiles, SearchPattern is ignored. } } if (searchOption == SearchOption.AllDirectories) { IEnumerator<DirectoryInfoEx> dirEnumerator = EnumerateDirectories("*", SearchOption.TopDirectoryOnly, cancel).GetEnumerator(); while (!IOTools.IsCancelTriggered(cancel) && dirEnumerator.MoveNext()) { IEnumerator<FileInfoEx> fileEnumerator = dirEnumerator.Current.EnumerateFiles(searchPattern, searchOption, cancel).GetEnumerator(); while (fileEnumerator.MoveNext()) { //Debug.Assert(!fileEnumerator.Current.IsFolder); yield return fileEnumerator.Current; } } } } } finally { if (parentPIDL != null) { parentPIDL.Free(); parentPIDL = null; } if (IEnum != null) { Marshal.ReleaseComObject(IEnum); Marshal.Release(ptrEnum); } } }