我正在创建一个HttpWebRequest
来下载文件。
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
现在成功了,我得到了响应流并尝试写入文件。
Stream responseStream = myHttpWebRequest.GetResponseStream();
DirectoryInfo di = new DirectoryInfo(url);
string documents = "";
if(UIDevice.CurrentDevice.CheckSystemVersion(8,0))
documents = NSFileManager.DefaultManager.GetUrls(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomain.User)[0].ToString();
else
documents = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); // iOS 7 and earlier
var filename = Path.Combine(documents, di.Name);
FileStream fstr = new FileStream(filename, FileMode.OpenOrCreate,FileAccess.Write);
responseStream.CopyTo(fstr);
iOS7的代码完美无缺。但是在iOS8条件下,我得到的文档和文件名是"file:///Users/bharathkamath/Library/Developer/CoreSimulator/Devices/1FC25FA1-835A-414B-81FD-34B58F9EC16E/data/Containers/Data/Application/C70F4B4D-1DBB-427C-8CF7-2A09967A864C/Documents/4 QA doc 15.docx"
,这是一个有效的文件路径。 (我检查了文件夹结构。)
现在,当我创建一个新的文件流时,我得到一个例外,因为路径现在已经改为
,因此丢失了一些子文件夹/Users/bharathkamath/Library/Developer/CoreSimulator/Devices/1FC25FA1-835A-414B-81FD-34B58F9EC16E/data/Containers/Bundle/Application/9D9D6488-25C1-4F1A-8F3D-
/Containers/Data/
已更改为/Containers/Bundle/
。
知道新FileStream改变路径的原因吗?
编辑:例外
Unhandled Exception: System.IO.DirectoryNotFoundException: Could not find a part of the path "/Users/bharathkamath/Library/Developer/CoreSimulator/Devices/1FC25FA1-835A-414B-81FD-34B58F9EC16E/data/Containers/Bundle/Application/3B84B11D-CF99-41A5-BBA5-1B170B0A9574/RBCPPLMobileiOS.app/file:///Users/bharathkamath/Library/Developer/CoreSimulator/Devices/1FC25FA1-835A-414B-81FD-34B58F9EC16E/data/Containers/Data/Application/E214C51F-3260-455A-850E-7C3C5A5E9460/Documents/test.docx".
答案 0 :(得分:0)
目录是正确的,因为iOS 8模拟器已经改变了文件结构,如您所见。但我认为您的代码存在问题:
documents = NSFileManager.DefaultManager.GetUrls(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomain.User)[0].ToString();
在行的末尾,您调用“ToString()”方法。 “ToString()”将返回以“file://”开头的文件路径。然后,您将尝试使用FileStream使用C#(Mono)复制文件。好吧,C#(Mono)不喜欢以“file://”开头的路径。所以你必须摆脱它。
最简单的方法是调用“.Path”属性而不是“.ToString()”方法。这将返回没有“file://”的路径。
documents = NSFileManager.DefaultManager.GetUrls(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomain.User)[0].Path;
这应该采用C#喜欢的格式,并且应该按预期工作。不要忘记关闭你的文件流,以便写入文件。