2016-10-21 6 views
4

Ich weiß, dass AvailableFreeSpace für lokale Laufwerke wie "C: /", "D: /" usw. verwendet werden kann. Es funktioniert auch auf Netzlaufwerken.Siehe AvailableFreeSpace von Laufwerken über IP-Adresse

Aber jetzt meine Frage:

Ist es möglich, die AvailableFreeSpace eines „Ordner“ auf einem anderen IP zu sehen? Ich verbinde mit diesem Code auf den lokalen Laufwerken:

System.IO.DriveInfo _DriveInfo = new DriveInfo(SaveLocation); 

Wenn "SaveLocation" ein lokales Laufwerk wie "C: \ Temp \ Folder", als es gut funktioniert.

Aber wenn es eine IP in "SaveLocation" gibt, funktioniert es nicht. SaveLocation sieht in diesem Fall so aus: "192.168.200.10 \ c \ Data"

Das funktioniert nicht und das ist der Grund für meine Frage. Die Ausnahmemeldung lautet: {"Das Objekt muss ein Stammverzeichnis (\" C \ ") oder ein Laufwerksbuchstabe (\" C \ ") sein."}

Ich hoffe, Sie können mir helfen.

+0

Nicht getestet, aber vielleicht ein UNC-Pfad funktioniert: '\\ 192.168.200.10 \ c \ Data' –

+0

Was ist, wenn Sie Standort als eine gemeinsame add Laufwerk zugeordnet und überprüfen Sie den freien Speicherplatz? – dotctor

+0

@ThomasSchremser Ich habe einen UNC-Pfad probiert. Es hat nicht funktioniert – Evosoul

Antwort

3

Wie in Get available disk free space for a given path on Windows gesehen:

die winapi Funktion GetDiskFreeSpaceEx den freien Speicherplatz auf einem UNC (Netzwerk) Pfad zu bestimmen, verwendet werden. Erstellen Sie zum Beispiel ein neues Freespace genannt VS-Projekt, und fügen Sie diese als Program.cs:

using System; 
    using System.Runtime.InteropServices; 

    namespace FreeSpace 
    { 
     class Program 
     { 
      [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)] 
      [return: MarshalAs(UnmanagedType.Bool)] 
      static extern bool GetDiskFreeSpaceEx(string lpDirectoryName, 
             out ulong lpFreeBytesAvailable, 
             out ulong lpTotalNumberOfBytes, 
             out ulong lpTotalNumberOfFreeBytes); 

      static void Main(string[] args) 
      { 
       ulong FreeBytesAvailable; 
       ulong TotalNumberOfBytes; 
       ulong TotalNumberOfFreeBytes; 

       bool success = GetDiskFreeSpaceEx(@"\\NETSHARE\folder", 
               out FreeBytesAvailable, 
               out TotalNumberOfBytes, 
               out TotalNumberOfFreeBytes); 
       if (!success) 
        throw new System.ComponentModel.Win32Exception(); 

       Console.WriteLine("Free Bytes Available:  {0,15:D}", FreeBytesAvailable); 
       Console.WriteLine("Total Number Of Bytes:  {0,15:D}", TotalNumberOfBytes); 
       Console.WriteLine("Total Number Of FreeBytes: {0,15:D}", TotalNumberOfFreeBytes); 
       Console.ReadKey(); 
      } 
     } 
    } 

Wie Sie sehen können, ist dies genau die gleiche Code wie in der Frage oben verbunden, nur in eine Klasse einkalkuliert plus Korrekte using Direktiven zum kompilieren ohne Fehler. Alle Credits gehen zu https://stackoverflow.com/users/995926/rekire

WMI scheint freien Speicherplatz auf Netzwerkfreigaben nicht zu behandeln. Aber für lokale Festplatten, sind Windows Management Interface der Weg zu gehen: https://msdn.microsoft.com/en-us/library/aa394592(v=vs.85).aspx

+0

Dies funktioniert für Mapped Drives, aber nicht für eine IP-Adresse ohne Mapping. Leider funktioniert das in meinem Fall nicht – Evosoul

+0

Sorry das funktioniert nicht für Sie. Alternativ können Sie auch die WinApp-Funktion GetDiskFreeSpaceEx verwenden: https://msdn.microsoft.com/de-de/library/windows/desktop/aa364937(v=vs.85).aspx Siehe http://stackoverflow.com/ Fragen/14465187/Get-Available-Disk-Freiraum-für-einen-gegebenen-Pfad-auf-Windows – NoMad

+0

Die [DLLImport] Variante funktionierte! Vielen Dank! Kannst du eine Antwort formulieren, damit ich sie annehmen kann? – Evosoul

Verwandte Themen