2016-03-10 89 views
4

我麻煩有關FileSavePicker一些問題。是否有任何解決方案關於保存StorageFile而不顯示任何彈出窗口或對話框來詢問用戶。我想從後面的代碼中提供存儲文件的當前路徑。C#UWP保存StorageFile沒有對話框

var byteArray = Convert.FromBase64String(Base64); 
StorageFile file = await Windows.Storage.ApplicationData.Current.LocalFolder.CreateFileAsync("file.jpg", CreationCollisionOption.ReplaceExisting); 
await Windows.Storage.FileIO.WriteBytesAsync(file, byteArray); 
var savePicker = new FileSavePicker(); 
savePicker.FileTypeChoices.Add("JPEG-Image", new List<string>() { ".jpg" }); 
savePicker.SuggestedSaveFile = file; 
savePicker.PickSaveFileAsync(); 
+0

它是什麼類型的文件? –

+2

有關如何寫入文件的信息,請參閱https://msdn.microsoft.com/de-de/library/system.io.file.openwrite(v=vs.110).aspx。 – musium

+0

你是如何得到當前路徑的 - 如果這是來自現有的StorageFile,你能否通過該對象保存? –

回答

5

...我們必須使用其下 'Windows.Storage.KnownFolders' 定義了幾個路徑...

並非如此。事實上,您的應用程序可以訪問設備上的任何文件夾,但它需要額外的權限。最直接的方式來獲得許可,你接下來應該做的: 1)要求用戶從FolderPicker 2)店內選擇的文件夾挑文件夾StorageApplicationPermissions.FutureAccessList 這個應用後可以做這個文件夾東西。

代碼,演示瞭如何獲取權限:

var folder = await StorageFolder.GetFolderFromPathAsync("your path"); 
var file = await folder.CreateFileAsync("text.txt"); 
using (var writer = await file.OpenStreamForWriteAsync()) 
{ 
     await writer.WriteAsync(new byte[100], 0, 0); 
} 

但請記住,「你的道路」是文件夾或任何:演示如何所需的文件夾中創建文件

var picker = new FolderPicker(); 
var pfolder = await picker.PickSingleFolderAsync(); 
StorageApplicationPermissions.FutureAccessList.Add(pfolder); 

代碼存儲到StorageApplicationPermissions.FutureAccessList的子文件夾的子文件夾。更多細節FutureAccessList

+0

在這個問題下最佳回答!感謝您的幫助 – alidrsn

+0

您可以,請將其標記爲答案,詳情請看這裏http://stackoverflow.com/help/someone-answers –

0

我要感謝大家的interest.I想出solution.If你不希望使用任何對話或提示您不能使用FileSavePicker。以下是將Base64字符串轉換爲圖像並保存所需的簡單代碼。

變種的ByteArray = Convert.FromBase64String(Base64編碼);

StorageFile file = await Windows.Storage.KnownFolders.SavedPictures.CreateFileAsync(「file.jpg」,CreationCollisionOption.ReplaceExisting);

等待Windows.Storage.FileIO.WriteBytesAsync(文件,字節陣列);

我想沒有辦法給出特定的路徑。我們必須使用'Windows.Storage.KnownFolders'下定義的幾條路徑。如果不是,請提供一些相關信息。

0

StorageFile.GetFileFromPathAsync()可能是你在找什麼。我認爲該文件必須事先創建,才能使用此方法。請注意,在某些位置創建文件可能需要額外的權限,或者甚至不可能(我不知道UWP和UAC如何交互)。

另一種可能性是使用Win32 APIs inside UWP apps。也許這可以解決您的問題,如果所需的API可用。