BExplorer.Shell.KnownFolderHelper.FromParsingName C# (CSharp) Method

FromParsingName() public static method

Returns a known folder given its shell path, such as C:\users\public\documents or ::{645FF040-5081-101B-9F08-00AA002F954E} for the Recycle Bin.
public static FromParsingName ( string parsingName ) : IKnownFolder
parsingName string The path for the requested known folder; either a physical path or a virtual path.
return IKnownFolder
        public static IKnownFolder FromParsingName(string parsingName)
        {
            IntPtr pidl = IntPtr.Zero, pidl2 = IntPtr.Zero;

            if (parsingName == null) throw new ArgumentNullException("parsingName");

            try
            {
                pidl = Shell32.PidlFromParsingName(parsingName);

                if (pidl == IntPtr.Zero)
                {
                    throw new ArgumentException("Parsing Name", "parsingName");
                }

                // It's probably a special folder, try to get it                
                IKnownFolderNative knownFolderNative = KnownFolderHelper.FromPIDL(pidl);
                if (knownFolderNative != null)
                {
                    IKnownFolder kf = KnownFolderHelper.GetKnownFolder(knownFolderNative);
                    if (kf == null)
                        throw new ArgumentException("Parsing Name", "parsingName");
                    else
                        return kf;
                }

                // No physical storage was found for this known folder
                // We'll try again with a different name

                // try one more time with a trailing \0
                pidl2 = Shell32.PidlFromParsingName(parsingName.PadRight(1, '\0'));

                if (pidl2 == IntPtr.Zero)
                {
                    throw new ArgumentException("Parsing Name", "parsingName");
                }

                IKnownFolderNative nativeKnownFolder = KnownFolderHelper.FromPIDL(pidl);
                IKnownFolder kf2 = null;
                if (nativeKnownFolder != null)
                {
                    kf2 = KnownFolderHelper.GetKnownFolder(nativeKnownFolder);

                    if (kf2 == null)
                    {
                        throw new ArgumentException("Parsing Name", "parsingName");
                    }
                }

                return kf2;
            }
            finally
            {
                Shell32.ILFree(pidl);
                Shell32.ILFree(pidl2);
            }
        }
    }

Usage Example

Example #1
0
        /*
         * /// <summary>
         * /// Returns a URI representation of the <see cref="ShellItem"/>.
         * /// </summary>
         * public Uri ToUri() {
         *      return this.ParsingName.StartsWith("::") ? new Uri("shell:///" + this.ParsingName) : new Uri(this.FileSystemPath);
         *      StringBuilder path = new StringBuilder("shell:///");
         *
         *      if (this.ParsingName.StartsWith("::")) {
         *              path.Append(this.ParsingName);
         *              return new Uri(path.ToString());
         *      }
         *      return new Uri(this.FileSystemPath);
         * }
         */

        private void Initialize(Uri uri)
        {
            if (uri.Scheme == "file")
            {
                ComInterface = CreateItemFromParsingName(uri.LocalPath);
            }
            else if (uri.Scheme == "shell")
            {
                //InitializeFromShellUri(uri);
                //TO_DO: add shell folders handling here
                //KnownFolderManager manager = new KnownFolderManager();
                string path = uri.GetComponents(UriComponents.Path, UriFormat.Unescaped);
                string knownFolder;
                string restOfPath;
                int    separatorIndex = path.IndexOf('/');

                if (separatorIndex != -1)
                {
                    knownFolder = path.Substring(0, separatorIndex);
                    restOfPath  = path.Substring(separatorIndex + 1);
                }
                else
                {
                    knownFolder = path;
                    restOfPath  = string.Empty;
                }

                try {
                    IKnownFolder knownFolderI = KnownFolderHelper.FromParsingName(knownFolder);
                    if (knownFolderI != null)
                    {
                        ComInterface = (knownFolderI as ShellItem).ComInterface;
                    }
                    else if (knownFolder.StartsWith(KnownFolders.Libraries.ParsingName))
                    {
                        var lib = ShellLibrary.Load(Path.GetFileNameWithoutExtension(knownFolder), true);

                        if (lib != null)
                        {
                            ComInterface = lib.ComInterface;
                        }
                    }
                }
                catch {
                }

                if (restOfPath != string.Empty)
                {
                    ComInterface = this[restOfPath.Replace('/', '\\')].ComInterface;
                }
            }
            else
            {
                throw new InvalidOperationException("Invalid URI scheme");
            }
        }
All Usage Examples Of BExplorer.Shell.KnownFolderHelper::FromParsingName