/// <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)); }
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(); }
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; }
/// <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); }
/// <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); }
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(); } }
public RawFindData(FILE_FULL_DIR_INFORMATION *info, string directory) { _info = info; Directory = directory; }