示例#1
0
 public FastDirectoryMember this[string name]
 {
     get
     {
         FastDirectoryMember ret = null;
         members.TryGetValue(name, out ret);
         return(ret);
     }
 }
        public FastDirectory(string directoryName)
        {
            System.Threading.Thread.Sleep(0);       // Allow interruption
            members = new Dictionary <string, FastDirectoryMember>(32, StringComparer.OrdinalIgnoreCase);
            WIN32_FIND_DATA info = new WIN32_FIND_DATA();

            if (directoryName.Length == 0 || (directoryName.Length == 2 && directoryName[1] == ':'))
            {
                directoryName += ".";
            }

            IntPtr handle = FindFirstFileW(directoryName + @"\*", ref info);

            if (handle != (IntPtr)(-1))
            {
                for (; ;)
                {
                    if (ShouldAdd(ref info))
                    {
                        var member = new FastDirectoryMember(ref info);
                        members.Add(member.Name, member);
                    }
                    if (FindNextFileW(handle, ref info) == 0)
                    {
                        int hr = Marshal.GetLastWin32Error();
                        if (hr != 18)       // NO MORE FILES
                        {
                            throw new System.ComponentModel.Win32Exception(hr);
                        }

                        break;
                    }
                }
                FindClose(handle);
            }
            else
            {
                int hr = Marshal.GetLastWin32Error();
                if (hr != 3)       // FILE NOT FOUND
                {
                    throw new System.ComponentModel.Win32Exception(hr);
                }
            }
        }