Skip to content

Commit a72b060

Browse files
committed
wip
1 parent 5564df3 commit a72b060

File tree

2 files changed

+105
-2
lines changed

2 files changed

+105
-2
lines changed

Microsoft.Toolkit.Uwp/Helpers/ObjectStorage/ApplicationDataStorageHelper.cs

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -282,12 +282,26 @@ public Task<bool> TryRenameItemAsync(string itemPath, string newName)
282282

283283
private async Task<T?> ReadFileAsync<T>(StorageFolder folder, string filePath, T? @default = default)
284284
{
285+
var dirName = System.IO.Path.GetDirectoryName(filePath);
286+
if (!string.IsNullOrEmpty(dirName))
287+
{
288+
folder = await folder.GetFolderAsync(dirName);
289+
filePath = System.IO.Path.GetFileName(filePath);
290+
}
291+
285292
string value = await StorageFileHelper.ReadTextFromFileAsync(folder, filePath);
286293
return (value != null) ? this.Serializer.Deserialize<T>(value) : @default;
287294
}
288295

289296
private async Task<IEnumerable<(DirectoryItemType, string)>> ReadFolderAsync(StorageFolder folder, string folderPath)
290297
{
298+
var dirName = System.IO.Path.GetDirectoryName(folderPath);
299+
if (!string.IsNullOrEmpty(dirName))
300+
{
301+
folder = await folder.GetFolderAsync(dirName);
302+
folderPath = System.IO.Path.GetFileName(folderPath);
303+
}
304+
291305
var targetFolder = await folder.GetFolderAsync(folderPath);
292306
var items = await targetFolder.GetItemsAsync();
293307

@@ -301,13 +315,27 @@ public Task<bool> TryRenameItemAsync(string itemPath, string newName)
301315
});
302316
}
303317

304-
private Task<StorageFile> CreateFileAsync<T>(StorageFolder folder, string filePath, T value)
318+
private async Task<StorageFile> CreateFileAsync<T>(StorageFolder folder, string filePath, T value)
305319
{
306-
return StorageFileHelper.WriteTextToFileAsync(folder, this.Serializer.Serialize(value)?.ToString(), filePath, CreationCollisionOption.ReplaceExisting);
320+
var dirName = System.IO.Path.GetDirectoryName(filePath);
321+
if (!string.IsNullOrEmpty(dirName))
322+
{
323+
folder = await folder.GetFolderAsync(dirName);
324+
filePath = System.IO.Path.GetFileName(filePath);
325+
}
326+
327+
return await StorageFileHelper.WriteTextToFileAsync(folder, this.Serializer.Serialize(value)?.ToString(), filePath, CreationCollisionOption.ReplaceExisting);
307328
}
308329

309330
private async Task CreateFolderAsync(StorageFolder folder, string folderPath)
310331
{
332+
var dirName = System.IO.Path.GetDirectoryName(folderPath);
333+
if (!string.IsNullOrEmpty(dirName))
334+
{
335+
folder = await folder.GetFolderAsync(dirName);
336+
folderPath = System.IO.Path.GetFileName(folderPath);
337+
}
338+
311339
await folder.CreateFolderAsync(folderPath, CreationCollisionOption.OpenIfExists);
312340
}
313341

UnitTests/UnitTests.UWP/Helpers/Test_ApplicationDataStorageHelper.cs

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,81 @@ public void Test_StorageHelper_NewPersonTest()
171171
Assert.AreEqual(input.Age, output.Age);
172172
}
173173

174+
[TestCategory("Helpers")]
175+
[TestMethod]
176+
public async Task Test_StorageHelper_FileCRUDTest()
177+
{
178+
var fileName = "TestFile.txt";
179+
var fileName2 = "TestFile2.txt";
180+
var fileContents = "this is a test";
181+
var fileContents2 = "this is also a test";
182+
var storageHelper = ApplicationDataStorageHelper.GetCurrent();
183+
184+
// Create a file
185+
await storageHelper.CreateFileAsync(fileName, fileContents);
186+
187+
// Read a file
188+
var readContents = await storageHelper.ReadFileAsync<string>(fileName);
189+
Assert.AreEqual(fileContents, readContents);
190+
191+
// Update a file
192+
await storageHelper.CreateFileAsync(fileName, fileContents2);
193+
var readContents2 = await storageHelper.ReadFileAsync<string>(fileName);
194+
Assert.AreEqual(fileContents2, readContents2);
195+
196+
// Rename a file
197+
var itemRenamed = await storageHelper.TryRenameItemAsync(fileName, fileName2);
198+
Assert.IsTrue(itemRenamed);
199+
200+
// Delete a file
201+
var itemDeleted = await storageHelper.TryDeleteItemAsync(fileName2);
202+
Assert.IsTrue(itemDeleted);
203+
}
204+
205+
[TestCategory("Helpers")]
206+
[TestMethod]
207+
public async Task Test_StorageHelper_SubFolderCRUDTest()
208+
{
209+
var folderName = "TestFolder";
210+
var subFolderName = "TestSubFolder";
211+
var subFolderName2 = "TestSubFolder2";
212+
var subFolderPath = $"{folderName}/{subFolderName}";
213+
var subFolderPath2 = $"{folderName}/{subFolderName2}";
214+
var fileName = "TestFile.txt";
215+
var filePath = $"{subFolderPath}/{fileName}";
216+
217+
var fileContents = "this is a test";
218+
var storageHelper = ApplicationDataStorageHelper.GetCurrent();
219+
220+
// Create a folder
221+
await storageHelper.CreateFolderAsync(folderName);
222+
223+
// Create a subfolder
224+
await storageHelper.CreateFolderAsync(subFolderPath);
225+
226+
// Create a file in the subfolder
227+
await storageHelper.CreateFileAsync(filePath, fileContents);
228+
229+
// Read a file from the subfolder
230+
var readContents = await storageHelper.ReadFileAsync<string>(filePath);
231+
Assert.AreEqual(fileContents, readContents);
232+
233+
// List subfolder contents
234+
var folderItems = await storageHelper.ReadFolderAsync(subFolderPath);
235+
var folderItemsList = folderItems.ToList();
236+
Assert.AreEqual(1, folderItemsList.Count());
237+
Assert.AreEqual(fileName, folderItemsList[0].Name);
238+
Assert.AreEqual(Microsoft.Toolkit.Helpers.DirectoryItemType.File, folderItemsList[0].ItemType);
239+
240+
// Rename a subfolder
241+
var itemRenamed = await storageHelper.TryRenameItemAsync(subFolderPath, subFolderName2);
242+
Assert.IsTrue(itemRenamed);
243+
244+
// Delete a subfolder
245+
var itemDeleted = await storageHelper.TryDeleteItemAsync(subFolderPath2);
246+
Assert.IsTrue(itemDeleted);
247+
}
248+
174249
public class Person
175250
{
176251
public string Name { get; set; }

0 commit comments

Comments
 (0)