Ejemplo n.º 1
0
        public static int EntriesEx(string FullFindFirstFileString, OnFindData FindDataCallback)
        {
            FIND_DATA_RAW find_data    = new FIND_DATA_RAW();
            int           rc           = 0;
            IntPtr        SearchHandle = IntPtr.Zero;

            try
            {
                SearchHandle = Spi.Native.FindFirstFileEx(
                    FullFindFirstFileString
                    , Native.FINDEX_INFO_LEVELS.FindExInfoBasic
                    , ref find_data
                    , Native.FINDEX_SEARCH_OPS.FindExSearchNameMatch
                    , IntPtr.Zero
                    , Native.FINDEX_ADDITIONAL_FLAGS.FIND_FIRST_EX_LARGE_FETCH);

                if (SearchHandle == Native.INVALID_HANDLE_VALUE)
                {
                    rc = Marshal.GetLastWin32Error();
                }
                else
                {
                    do
                    {
                        if (IsDotOrDotDotDirectory(find_data.cFileName))
                        {
                            continue;
                        }
                        FindDataCallback(ref find_data);
                    }while (Native.FindNextFileW(SearchHandle, ref find_data));

                    if (Marshal.GetLastWin32Error() != Native.ERROR_NO_MORE_FILES)
                    {
                        rc = Marshal.GetLastWin32Error();
                    }
                }
            }
            finally
            {
                if (SearchHandle != IntPtr.Zero)
                {
                    Native.FindClose(SearchHandle);
                }
            }
            return(rc);
        }
Ejemplo n.º 2
0
        private static void BuildSendData(ref FIND_DATA_RAW find_data, BinaryWriter bw)
        {
            int lenFilename = LenOfFilename(find_data.cFileName);

            byte[] UTF8Filename = new byte[260 * 4];
            int UTF8byteswritten = 0;

            unsafe
            {
                fixed (UInt16* ptrFilename = find_data.cFileName)
                fixed (byte* utf8buffer = UTF8Filename)
                {
                    char* chars = (char*)ptrFilename;
                    UTF8byteswritten = Encoding.UTF8.GetBytes(
                        chars:      chars, 
                        charCount:  lenFilename, 
                        bytes:      utf8buffer, 
                        byteCount:  UTF8Filename.Length);
                }
            }

            bw.Write(UTF8Filename, 0, UTF8byteswritten);
            bw.Write((byte)0);
        }