私のiPhoneアプリでは、次のコードを使用してファイルのサイズを見つけています。ファイルは存在しますが、サイズがゼロになっています。誰も私を助けることができますか?前もって感謝します。
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *URL = [documentsDirectory stringByAppendingPathComponent:@"XML/Extras/Approval.xml"];
NSLog(@"URL:%@",URL);
NSError *attributesError = nil;
NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:URL error:&attributesError];
int fileSize = [fileAttributes fileSize];
これを試して;
NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:URL error:&attributesError];
NSNumber *fileSizeNumber = [fileAttributes objectForKey:NSFileSize];
long long fileSize = [fileSizeNumber longLongValue];
FileSizeは必ずしも整数(特に符号付きの整数)に収まらないことに注意してください。ただし、iOSの場合は実際にはそれを超えることはないので、確かにlongに落とすことができます。私のコードでは、はるかに大きなストレージが利用可能なシステムと互換性がなければならないので、この例ではlongを使用しています。
Swiftの1つのライナー:
let fileSize = try! NSFileManager.defaultManager().attributesOfItemAtPath(fileURL.path!)[NSFileSize]!.longLongValue
URL
(NSURL
ではなくString
)がある場合、FileManager
なしでファイルサイズを取得できます。
let attributes = try? myURL.resourceValues(forKeys: Set([.fileSizeKey]))
let fileSize = attributes?.fileSize // Int?
Swift 4.x
do {
let fileSize = try (FileManager.default.attributesOfItem(atPath: filePath) as NSDictionary).fileSize()
print(fileSize)
} catch let error {
print(error)
}
[〜#〜] mb [〜#〜]でファイルサイズを取得するSwiftでこのコードを試す
func getSizeOfFile(withPath path:String) -> UInt64?
{
var totalSpace : UInt64?
var dict : [FileAttributeKey : Any]?
do {
dict = try FileManager.default.attributesOfItem(atPath: path)
} catch let error as NSError {
print(error.localizedDescription)
}
if dict != nil {
let fileSystemSizeInBytes = dict![FileAttributeKey.systemSize] as! NSNumber
totalSpace = fileSystemSizeInBytes.uint64Value
return (totalSpace!/1024)/1024
}
return nil
}