How to delete Database file created by Sqlite-net in Windows store application. I tried this
StorageFile sampleFile = await ApplicationData.Current.LocalFolder.GetFileAsync(databaseName);
sampleFile.DeleteAsync(StorageDeleteOption.Default);
but neither getting any exception nor file is getting deleted. What am i missing here ?
Try awaiting the DeleteAsync as well
StorageFile sampleFile = await ApplicationData.Current.LocalFolder.GetFileAsync(databaseName);
await sampleFile.DeleteAsync(StorageDeleteOption.Default);
Related
I am working on a small UWP app that will take pictures and video and save it at a desired location on the PC.
Here is the code base I am using https://github.com/Microsoft/Windows-universal-samples/blob/master/Samples/CameraStarterKit/cs/MainPage.xaml.cs
When I try to initialize StorageFolder class with a desired path, it comes out as null. It only supports to initialize with following paths
var picturesLibrary = await StorageLibrary.GetLibraryAsync(KnownLibraryId.Documents);
var picturesLibrary = await StorageLibrary.GetLibraryAsync(KnownLibraryId.Music);
var picturesLibrary = await StorageLibrary.GetLibraryAsync(KnownLibraryId.Pictures);
var picturesLibrary = await StorageLibrary.GetLibraryAsync(KnownLibraryId.Videos);
Here is my code:
private StorageFolder _captureFolder = null;
_captureFolder = picturesLibrary.SaveFolder ?? ApplicationData.Current.LocalFolder;
var file = await _captureFolder.CreateFileAsync("SmartPhoto.jpg",
CreationCollisionOption.GenerateUniqueName);
var picturesLibrary = await Task.Run(() =>
System.IO.File.Move(file.Path, #"C:\Temp\Pictures\" + file.Name));
Since StorageFolder is not initializing for C:\Temp\Pictures, I tried to move that file from KnownLibraryId.Pictures to C:\Temp\Pictures and that fails too,
System.UnauthorizedAccessException: 'Access to the path
'C:\Temp\Pictures' is denied.'
This is by design, an UWP app can not - by default - access all locations on your hard drive...
It only has a specific set of folders allowed, but you can enable more by using the file picker or adding capabilities.
As mentioned in the docs here : https://learn.microsoft.com/en-us/windows/uwp/files/file-access-permissions
Universal Windows Apps (apps) can access certain file system locations
by default. Apps can also access additional locations through the file
picker, or by declaring capabilities.
I want to create a folder named "TestFolder" on local folder of my uwp app. And need to upload files to it. It works fine on my system when I first manually create a folder((TestFolder) on local folder. but when I create app package for the project and tried to run it in another windows pc. It throws an error "System cant find the file specified". How can I resolve it?
StorageFolder appFolder = await ApplicationData.Current.LocalFolder.GetFolderAsync("TestFolder");
if (appFolder == null)
{
//Create folder
appFolder = await Windows.Storage.ApplicationData.Current.LocalFolder.CreateFolderAsync("TestFolder");
}
i would replace this few lines by this single line
var appFolder = await Windows.Storage.ApplicationData.Current.LocalFolder.CreateFolderAsync("TestFolder", Windows.Storage.CreationCollisionOption.OpenIfExists);
You can modify your code this way to get your desired result,
StorageFolder appFolder = await ApplicationData.Current.LocalFolder.GetFolderAsync("TestFolder");
if (appFolder == null)
{
//Create folder
appFolder = await Windows.Storage.ApplicationData.Current.LocalFolder.CreateFolderAsync("TestFolder",CreationCollisionOption.OpenIfExists);
}
I'm currently having trouble finding out how to implement isolated storage in a windows universal project.
All I want to do is safe some text in isolated storage when a button is clicked and the be able to retrieve it later on a different page for use.
You can use ApplicationData.Current.LocalSettings as a dictionary where you can save some primitive object.
ApplicationData.Current.LocalSettings.Values["MyKey"] = MyValue;
if (ApplicationData.Current.LocalSettings.Values.ContainsKey("MyKey"))
MyValue = ApplicationData.Current.LocalSettings.Values["MyKey"];
You can store your app data locally in UWP, e.g. ApplicationData.Current.LocalFolder, and this is 'Isolated storage' what you are talking about. Here is a code sample for you:
//Create dataFile.txt in LocalFolder and write “My text” to it
StorageFolder localFolder = ApplicationData.Current.LocalFolder;
StorageFile sampleFile = await localFolder.CreateFileAsync("dataFile.txt");
await FileIO.WriteTextAsync(sampleFile, "My text");
//Read the first line of dataFile.txt in LocalFolder and store it in a String
StorageFile sampleFile = await localFolder.GetFileAsync("dataFile.txt");
String fileContent = await FileIO.ReadTextAsync(sampleFile);
You can also see here for more details: Getting started storing app data locally
I am in trouble with some issue about FileSavePicker. Is there any solution about saving a StorageFile without showing any popup or dialog to ask user. I want to give the current path of the storage file from code behind.
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();
...We have to use a few paths which are defined under
'Windows.Storage.KnownFolders'...
it is not so. In fact your app can access any folder on device but it will need additional permissions. The most straightforward way to obtain permission you should do next:
1) ask user to pick folder from FolderPicker
2) store selected folder to StorageApplicationPermissions.FutureAccessList
After this your app can do anything with this folder.
Code that demonstrate how to obtain permissions:
var picker = new FolderPicker();
var pfolder = await picker.PickSingleFolderAsync();
StorageApplicationPermissions.FutureAccessList.Add(pfolder);
Code that demonstrate how to create file in desired folder:
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);
}
But keep in mind that "your path" is folder or any of subfolder that was stored to StorageApplicationPermissions.FutureAccessList. More details here FutureAccessList
StorageFile.GetFileFromPathAsync() is probably what you are looking for. I think the file must be created beforehand for this method to work. Be aware that creating the file in some locations might need additional permissions or is even impossible (I don't know how UWP and UAC interact).
Another possibility is to use Win32 APIs inside UWP apps. Maybe this can solve your problem if the desired API is available.
I want to thank you all for your interest. I figured out the solution. If you do not want to use any dialog or prompting you can not use FileSavePicker. Here are the simple codes you need to converting Base64 string to image and save.
var byteArray = Convert.FromBase64String(Base64);
StorageFile file = await Windows.Storage.KnownFolders.SavedPictures.CreateFileAsync(
"file.jpg", CreationCollisionOption.ReplaceExisting);
await Windows.Storage.FileIO.WriteBytesAsync(file, byteArray);
I guess there is no way to give specific path. We have to use a few paths which are defined under Windows.Storage.KnownFolders. If it is not, please give some information about it.
Does anyone know, how to download a Image from a path like "C:/Data/Users/Public/Pictures/Camera Roll/Picture.jpg" (in a Windows Phone 8.1 Device) and save it as a BitmapImage? I tried it with this, but after that I don't know, how to save the StorageFile as a BitmapImage.
StorageFolder picturesFolder = KnownFolders.CameraRoll;
StorageFile storageFile = await picturesFolder.GetFileAsync(fileName);
I hope someone can help me.
Cristian
Create a stream out of the file and open it via SetSourceAsync (here).
using (var stream = await storageFile.OpenReadAsync())
{
await bitmap.SetSourceAsync(stream);
}