2014-02-11 87 views
11

我有一個適用於Android的Xamarin-Studio應用程序,我只是想下載文件並將它們保存到本地。但是,當我試圖創建的文件夾files文件我得到一個異常:無法用Xamarin在Android上創建文件

File.Create("data/data/com.company.app/files/newFile.png"); 

給我:

System.UnauthorizedAccessException 
Access to the path 'data/data/com.company.app/files/newFile.png' is denied. 

我在做什麼錯?

+0

你使用的是Mac OS X? – Jorgesys

+0

你怎麼知道「文件」存在?你在檢查這個嗎? –

+0

是的,我在OS X上。我植根了我的測試設備,並已使用根瀏覽器檢查過「文件」確實存在。此外,我正在使用一個Dropbox框架在那裏成功創建文件。我只是無法手動創建文件... – codingFriend1

回答

2

我終於意識到File.create()不是問題所在。我有這樣的代碼:

string tmpFilePath = FilesDir.AbsolutePath.stringByAppendingPath (f.Path); 
Java.IO.File tmpFile = new Java.IO.File(tmpFilePath); 
tmpFile.Mkdirs(); 

然而,Mkdirs()不僅創建所有的中間目錄 - 正如我曾以爲 - 也將在文件路徑本身的目錄。所以文件不能被創建,因爲已經有一個同名的目錄。 正確的方法是:

string tmpFile = FilesDir.AbsolutePath.stringByAppendingPath (f.Path); 
Java.IO.File tmpParentFolder = new Java.IO.File(tmpFile).getParentFile(); 
tmpParentFolder.Mkdirs(); 

在我的防守,一個FileExistsAndIsDirectory例外本來大有幫助比UnauthorizedAccessException

+0

https://developer.xamarin.com/guides/ios/application_fundamentals/working_with_the_file_system/ –

1

使用單聲道,我認爲必須與Xamarin Studio相同。

var path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 
File.Create(path + "newFile.png"); 
+0

這不是給我SD卡的文件路徑嗎?我需要在Apps包中編寫內部存儲。 – codingFriend1

+2

嘗試'Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);' – Krumelur

+0

System.Environment不包含方法GetFolderPath –

16

您應該使用Environment或IsolatedStorage。例如:

var path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 
var filename = Path.Combine(path, "newFile.png"); 
7

我編碼Xamarin與VS2013。對於使用我正在編寫的應用程序創建的目錄,我的訪問被拒絕。我的應用程序由通過串聯創建一個名爲/storage/emulated/0/POIApp目錄:

System.IO.Path.Combine(Android.OS.Environment.ExternalStorageDirectory.Path, "POIApp"); 

我發現,我不得不使用VS2013編輯我的應用程序(POIApp)的「屬性」,即,在溶液中右鍵單擊該項目圖標探險家;從彈出菜單中選擇屬性。 VS2013主窗口中出現一個新選項卡。在左側有幾個選項,例如,應用程序,Android Manifest,Android選項,Build等。選擇「Android Manifest」。在主面板的底部是「必需的權限」部分。當我檢查「READ_EXTERNAL_STORAGE」和「WRITE_EXTERNAL_STORAGE」時,我的問題得到了解決。

3

,添加以下權限到Android.Manifest文件

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

相關問題