1

Ich schreibe ein Windows Phone 8.1 (Winrt) App. Ich muss StorageFile von Pfad (String) bekommen. Ich gehe in Unterordner, bis ich Datei mit dieser Methode iterativ bekomme. (Die Methode läuft so lange, bis sie storageFile findet)Rückgabedaten von Selbst-Loopoing-Methode in C#

Aber wie kann man diese storageFile zurückgeben? Es gibt Null vom ersten Lauf (Schleife) zurück.

public static async Task<StorageFile> GetStorageFileAsync(StorageFolder currentFolder, string filePath) 
     { 
      StorageFile file = null; 
      if (FileHelper.IfPathContainDirectory(filePath)) 
      { 
       // Just get the folder. 
       string subFolderName = Path.GetDirectoryName(filePath); 

       bool isSubFolderExist = await FileHelper.IfFolderExistsAsync(currentFolder, subFolderName); 

       StorageFolder subFolder=null; 

       if (isSubFolderExist) 
       { 
        // Just get the folder. 
        subFolder = 
         await currentFolder.GetFolderAsync(subFolderName); 
       } 
       else 
       { 
        return null; 
       } 

       string newFilePath = Path.GetFileName(filePath); 

       if (!string.IsNullOrEmpty(newFilePath)) 
       { 
        //get file iteratively. 
        await GetStorageFileAsync(subFolder, newFilePath); 
       } 
       return file; 
      } 
      else 
      { 

       try 
       { 
        file = await currentFolder.GetFileAsync(filePath); 
       } 
       catch(Exception fileExp) 
       { 

       } 

       return file; 
      } 
     } 

Es in Verfahren tritt, prüft auf das Vorhandensein von Unterordner in Pfadzeichenfolge und wird in diesem Unterordner tiefer, und schließlich tritt in anderen Teil der Zustand und bekommt Datei. Es gibt diese Datei nicht zurück, aber es gibt Objekt null von der ersten Ausführung der Schleife zurück.

+0

Sie können einen dritten Parameter übergeben, der ein StorageFile-Typ (ref) ist, und ihm einfach zuweisen, sobald Sie ihn gefunden haben. – master2080

+1

Async-Methoden können Ref oder Out-Parameter nicht haben :( –

+0

Ich wusste nie. – master2080

Antwort

2

Sie haben vergessen, die file Variablen zugewiesen:

await GetStorageFileAsync(subFolder, newFilePath); 

file = await GetStorageFileAsync(subFolder, newFilePath); 

sein sollte Haben Sie den Code nicht versuchen, aber das wäre ein offensichtlicher Grund des Ergebnisses sein null zu sein.

+1

Ops! Ja, was für ein dummer Fehler. Vielen Dank –

Verwandte Themen