Как вы получаете плоский список всех файлов в изолированной табличке?

StackOverflow https://stackoverflow.com/questions/3038770

Вопрос

Мне нужно получить список всех файлов в данной папке изолированной панели. Существуют дополнительные папки с корня изолированной панели, и они должны быть включены в список.

Обычные классы System.io не могут использоваться с изолированной панелью.

Это было полезно?

Решение

Вот что я придумал - это работает, но мне интересно узнать, есть ли лучшие альтернативы:

using System.Collections.Generic;
using System.IO;
using System.IO.IsolatedStorage;
using System.Linq;

public static class IsolatedStorageFileExtensions
{

    /// <summary>
    /// Recursively gets a list of all files in isolated storage
    /// </summary>
    /// <remarks>Based on <see cref="http://dotnetperls.com/recursively-find-files"/></remarks>
    /// <param name="isolatedStorageFile"></param>
    /// <returns></returns>
    public static List<string> GetAllFilePaths(this IsolatedStorageFile isolatedStorageFile)
    {
        // Store results in the file results list
        List<string> result = new List<string>();

        // Store a stack of our directories
        Stack<string> stack = new Stack<string>();

        // Add initial directory
        string initialDirectory = "*";
        stack.Push(initialDirectory);

        // Continue while there are directories to process
        while (stack.Count > 0)
        {
            // Get top directory
            string dir = stack.Pop();

            string directoryPath;
            if (dir == "*")
            {
                directoryPath = "*";
            }
            else
            {
                directoryPath = dir + @"\*";
            }

            // Add all files at this directory to the result List
            var filesInCurrentDirectory = isolatedStorageFile.GetFileNames(directoryPath).ToList<string>();

            List<string> filesInCurrentDirectoryWithFolderName = new List<string>();

            // Prefix the filename with the directory name
            foreach (string file in filesInCurrentDirectory)
            {
                filesInCurrentDirectoryWithFolderName.Add(Path.Combine(dir, file));
            }

            result.AddRange(filesInCurrentDirectoryWithFolderName);

            // Add all directories at this directory
            foreach (string directoryName in isolatedStorageFile.GetDirectoryNames(directoryPath))
            {
                stack.Push(directoryName);
            }

        }

        return result;

    }

}

Другие советы

Ты гений, но и при получении новых каталогов, вы должны объединить свой путь с исходным каталогом.

// Add all directories at this directory
foreach (string directoryName in isolatedStorageFile.GetDirectoryNames(directoryPath))
{
    stack.Push(Path.Combine(dir,directoryName));
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top