在DidPickDocument
UIDocumentPickerViewController
事件中,我尝试将所选文件导入/写入应用程序的本地Documents目录。
这适用于“小”文件(例如<100MB),使用带有覆盖的子类UIDocument类
public override bool LoadFromContents(NSObject contents, string typeName, out NSError outError)
{
outError = null;
if (contents != null)
{
Content = ((NSData)contents).ToArray();
}
...
...并致电
MySubclassedDoc mySubclassedDoc = new MySubclassedDoc (nsurl);
bool success = await mySubclassedDoc.OpenAsync();
File.WriteAllBytes("targetFile.xyz", mySubclassedDoc.Content);
但是如果文件较大(例如400MB),则在调用LoadFromContents
之前应用程序崩溃是因为内存不足(RAM)。
因此需要一种方法将所选文件直接传输到文件。 你怎么能用给定的NSUrl做到这一点?
答案 0 :(得分:0)
答案 1 :(得分:0)
由于您已获得网址,因此无需将其转换为NSData
,然后将数据存储到文件中。我们可以将此网址与NSFileManager
一起使用,如:
url.StartAccessingSecurityScopedResource();
string docPath = NSSearchPath.GetDirectories(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomain.User)[0];
string filePath = Path.Combine(docPath, "fileName.type");
NSError error;
NSFileManager fileManager = new NSFileManager();
fileManager.Copy(url.Path, filePath, out error);
url.StopAccessingSecurityScopedResource();
通过这种方式,我们可以将文件存储到我们应用程序自己的文档目录中。