[WinRT] Añadiendo algo de funcionalidad básica a la API.

Introducción

Como me imagino que todos sabréis ya ha salido hace algún tiempo Windows 8, y la programación para él es relativamente distinta que para el resto de aplciaciones “tradicionales”.

Aunque ya llevo un tiempo trabajando con Windows 8 como sistema operativo, y con WINRT desarrollando aplicaciones para él, se siguen echando en falta algunas cosas en las APIS que nos proveen dentro del nuevo Framework.

En este post voy a exponer dos métodos interesantes para la API de manejo de ficheros.

Código

Dentro de mi proyecto, he definido una clase estática en la que he agregado dos métodos extensores para los elementos que implementen la interfaz IStorageFolder`:

– El primero de ellos será para mover todo el contenido de un directorio.

– El segundo será para copiar todo el contenido de un directorio.

   1: public async static Task CopyFolderAsync(this IStorageFolder folder, IStorageFolder destinationFolder)

   2:       {

   3:  

   4:           if (destinationFolder == null)

   5:               throw new ArgumentNullException("Destination Folder can't be null");

   6:           var destFolder = await destinationFolder.CreateFolderAsync(folder.Name);

   7:           var files = await folder.GetFilesAsync();

   8:           foreach (var file in files)

   9:           {

  10:               await file.CopyAsync(destFolder);

  11:  

  12:           }

  13:  

  14:       }

  15:       public async static Task<IStorageFolder> MoveFolderAsync(this IStorageFolder folder, IStorageFolder destinationFolder)

  16:       {

  17:  

  18:           if (destinationFolder == null)

  19:               throw new ArgumentNullException("Destination Folder can't be null");

  20:           var destFolder = await destinationFolder.CreateFolderAsync(folder.Name);

  21:           var items = await folder.GetItemsAsync();

  22:           foreach (var item in items)

  23:           {

  24:               if (item is StorageFile)

  25:                   await ((StorageFile)item).CopyAsync(destFolder);

  26:               else if (item is StorageFolder)

  27:                   await ((StorageFolder)item).CopyFolderAsync(destFolder);

  28:           }

  29:           await folder.DeleteAsync(StorageDeleteOption.PermanentDelete);

  30:           return destFolder;

  31:       }

 

Espero que os resulte de utilidad, y que estéis haciendo cosas ya para Windows8!!!

 

Saludos!