【问题标题】:Unable to get list of files in directory from MonoGame无法从 MonoGame 获取目录中的文件列表
【发布时间】:2013-03-04 02:12:25
【问题描述】:

当我遇到一个有趣的问题时,我正在将我的一个 XNA 项目移植到 Monogame 中。由于作为 Windows 8 用户,我的应用程序是沙盒化的,因此我不能使用我习惯使用的 Directory.GetFiles 方法来提取内容目录中的文件列表。我的目标是获取内容目录中的文件列表,例如 (myappinstalllocation\Content\TypeofContent\XmlFiles)。

在 Xna 中我会使用:

string[] skillFiles = Directory.GetFiles(path, "*.xml");

我从 msdn 尝试了以下代码,但异步方法有时会在几分钟内无法返回,有时根本不返回:

string[] fileNames = SystemIO.getFileNames(path, "xml").Result;

public static async Task<string[]> getFileNames(string pPath, string pExt)
    {
        List<string> results = new List<string>();
        StorageFolder folder = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync(pPath);

        IReadOnlyList<StorageFile> contents = await folder.GetFilesAsync();

        foreach (StorageFile file in contents)
        {
            if (file.FileType.Contains(pExt))
            {
                results.Add(file.Name);
            }
        }

        return results.ToArray();
    }

我不知道 MonoGame 是否提供了一种获取文件名的方法,或者 WinStore API 是否提供。我想尽可能多地动态加载我的内容,所以我希望这是可行的。

【问题讨论】:

    标签: c# io xna directory monogame


    【解决方案1】:

    我认为你看到的是一个僵局。在 UI 线程上使用 Task.Result 可以做到这一点。尝试改用await

    string[] fileNames = await SystemIO.getFileNames(path, "xml");
    

    await 是非阻塞的,并允许 UI 线程在您对 getFileNames 的调用完成时执行其他操作。

    查看 Stephen Cleary 关于该主题的出色博客文章:http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html

    【讨论】:

    • 这行得通。我还必须将 async 关键字添加到调用 getFilenames() 的方法中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 2012-12-26
    相关资源
    最近更新 更多