【问题标题】:Device free space and sandbox space used使用的设备可用空间和沙盒空间
【发布时间】:2011-07-04 16:52:59
【问题描述】:

我正在尝试获取设备上的可用空间以及我的沙盒正在使用的空间量。有什么想法吗?

谢谢, 瑞克

【问题讨论】:

  • 仍在寻求帮助...我已经尝试过: NSFileManager.SystemFreeSize.Length 但得到一些废话 (20) 和 DriveInfo[] allDrives = DriveInfo.GetDrives(); d.AvailableFreeSpace;但这使应用程序崩溃,MonoTouch 告诉我不支持该 API。为什么在设备上获得可用空间如此困难????
  • 仍在寻找有关如何获得设备上总可用空间的答案 - MonoTouch 是否有任何更新?

标签: ios ios4 xamarin.ios


【解决方案1】:

在 Objective-C 中,您可以使用 NSFileManager 获取可用的文件系统空间:

NSFileManager* filemgr = [NSFileManager defaultManager];

NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDirectory = [paths objectAtIndex:0];            

NSDictionary* fsAttr = [filemgr attributesOfFileSystemForPath:docDirectory error:NULL];

unsigned long long freeSize = [(NSNumber*)[fsAttr objectForKey:NSFileSystemFreeSize] unsignedLongLongValue];

要了解您的应用使用的空间量,请阅读以下问题: Calculate the size of a folder

【讨论】:

    【解决方案2】:

    这很接近,但并不完美。

    NSFileManager a = NSFileManager.DefaultManager;
    NSError _error;
    
    string _databaseFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "..");
    NSDictionary _b =  a.GetFileSystemAttributes(_databaseFolder,out _error);
    NSObject _d =  NSObject.FromObject("NSFileSystemFreeSize");
    NSObject _c =  _b.ObjectForKey(_d);
    

    【讨论】:

      【解决方案3】:

      这是从@phix23 到 MonoTouch 的直接翻译(对不起,行的长度,可可太冗长了):

      var docDir = NSSearchPath.GetDirectories(NSSearchPathDirectory.DocumentDirectory,NSSearchPathDomain.User, true)[0];
      var freeSpace = NSFileManager.DefaultManager.GetFileSystemAttributes(docDir).FreeSize;
      

      【讨论】:

        猜你喜欢
        • 2010-09-27
        • 2013-05-24
        • 1970-01-01
        • 2019-07-09
        • 1970-01-01
        • 2021-07-17
        • 2015-03-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多