コード例 #1
0
        /// <summary>
        /// Gets the next info pointer or null if there are no more.
        /// </summary>
        public unsafe static FILE_FULL_DIR_INFORMATION *GetNextInfo(FILE_FULL_DIR_INFORMATION *info)
        {
            uint nextOffset = (*info).NextEntryOffset;

            if (nextOffset == 0)
            {
                return(null);
            }

            return((FILE_FULL_DIR_INFORMATION *)((byte *)info + nextOffset));
        }
コード例 #2
0
 public unsafe FullFileInformation(FILE_FULL_DIR_INFORMATION *info)
 {
     FileIndex              = info->FileIndex;
     CreationTimeUtc        = info->CreationTime.ToDateTimeUtc();
     LastAccessTimeUtc      = info->LastAccessTime.ToDateTimeUtc();
     LastWriteTimeUtc       = info->LastWriteTime.ToDateTimeUtc();
     ChangeTimeUtc          = info->ChangeTime.ToDateTimeUtc();
     EndOfFile              = info->EndOfFile;
     AllocationSize         = info->AllocationSize;
     FileAttributes         = info->FileAttributes;
     ExtendedAttributesSize = info->EaSize;
     FileName = info->FileName.CreateString();
 }
コード例 #3
0
            private unsafe void FindNextFile()
            {
                FILE_FULL_DIR_INFORMATION *info = _info;

                if (info != null && info->NextEntryOffset != 0)
                {
                    // We're already in a buffer and have another entry
                    _info = (FILE_FULL_DIR_INFORMATION *)((byte *)info + info->NextEntryOffset);
                    return;
                }

                GetData();

                _info = (FILE_FULL_DIR_INFORMATION *)_buffer.VoidPointer;
            }
コード例 #4
0
ファイル: Storage.cs プロジェクト: daxiang758/WInterop
        /// <summary>
        /// Gets all of the info for files within the given directory handle.
        /// </summary>
        public unsafe static IEnumerable <FullFileInformation> GetDirectoryInformation(SafeFileHandle directoryHandle)
        {
            List <FullFileInformation> infos = new List <FullFileInformation>();

            GetFullDirectoryInfoHelper(directoryHandle, buffer =>
            {
                FILE_FULL_DIR_INFORMATION *info = (FILE_FULL_DIR_INFORMATION *)buffer.BytePointer;
                do
                {
                    infos.Add(new FullFileInformation(info));
                    info = FILE_FULL_DIR_INFORMATION.GetNextInfo(info);
                } while (info != null);
            });
            return(infos);
        }
コード例 #5
0
ファイル: Storage.cs プロジェクト: daxiang758/WInterop
        /// <summary>
        /// Gets the filenames in the specified directory. Includes "." and "..".
        /// </summary>
        public unsafe static IEnumerable <string> GetDirectoryFilenames(SafeFileHandle directoryHandle)
        {
            List <string> filenames = new List <string>();

            GetFullDirectoryInfoHelper(directoryHandle, buffer =>
            {
                FILE_FULL_DIR_INFORMATION *info = (FILE_FULL_DIR_INFORMATION *)buffer.BytePointer;
                do
                {
                    filenames.Add(info->FileName.CreateString());
                    info = FILE_FULL_DIR_INFORMATION.GetNextInfo(info);
                } while (info != null);
            });
            return(filenames);
        }
コード例 #6
0
 public void NoMoreFiles()
 {
     _info = null;
     if (_pending == null || _pending.Count == 0)
     {
         _lastEntryFound = true;
     }
     else
     {
         // Grab the next directory to parse
         var next = _pending.Dequeue();
         HandleMethods.CloseHandle(_directory);
         _directory = next.Item1;
         _path      = next.Item2;
         FindNextFile();
     }
 }
コード例 #7
0
ファイル: RawFindData.cs プロジェクト: carlossanlop/WInterop
 public RawFindData(FILE_FULL_DIR_INFORMATION *info, string directory)
 {
     _info     = info;
     Directory = directory;
 }