| File: System\IO\DriveInfo.Unix.cs | Web Access |
| Project: src\runtime\src\libraries\System.IO.FileSystem.DriveInfo\src\System.IO.FileSystem.DriveInfo.csproj (System.IO.FileSystem.DriveInfo) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; using System.Security; namespace System.IO { public sealed partial class DriveInfo { public DriveType DriveType { get { DriveType type; Interop.Error error = Interop.Sys.GetDriveTypeForMountPoint(Name, out type); // This is one of the few properties that doesn't throw on failure, // instead returning a value from the enum. switch (error) { case Interop.Error.SUCCESS: return type; case Interop.Error.ELOOP: case Interop.Error.ENAMETOOLONG: case Interop.Error.ENOENT: case Interop.Error.ENOTDIR: return DriveType.NoRootDirectory; default: return DriveType.Unknown; } } } public string DriveFormat { get { string format; CheckStatfsResultAndThrowIfNecessary(Interop.Sys.GetFileSystemTypeNameForMountPoint(Name, out format)); return format; } } public long AvailableFreeSpace { get { Interop.Sys.MountPointInformation mpi; CheckStatfsResultAndThrowIfNecessary(Interop.Sys.GetSpaceInfoForMountPoint(Name, out mpi)); return checked((long)mpi.AvailableFreeSpace); } } public long TotalFreeSpace { get { Interop.Sys.MountPointInformation mpi; CheckStatfsResultAndThrowIfNecessary(Interop.Sys.GetSpaceInfoForMountPoint(Name, out mpi)); return checked((long)mpi.TotalFreeSpace); } } public long TotalSize { get { Interop.Sys.MountPointInformation mpi; CheckStatfsResultAndThrowIfNecessary(Interop.Sys.GetSpaceInfoForMountPoint(Name, out mpi)); return checked((long)mpi.TotalSize); } } private void CheckStatfsResultAndThrowIfNecessary(Interop.Error error) { if (error != Interop.Error.SUCCESS) { ThrowForError(error); } } private void CheckStatfsResultAndThrowIfNecessary(int result) { if (result != 0) { ThrowForError(Interop.Sys.GetLastError()); } } private void ThrowForError(Interop.Error error) { if (error == Interop.Error.ENOENT) { throw new DriveNotFoundException(SR.Format(SR.IO_DriveNotFound_Drive, Name)); // match Win32 } else { throw Interop.GetExceptionForIoErrno(error.Info()); } } private static string[] GetMountPoints() => Interop.Sys.GetAllMountPoints(); } }