我想知道可移植类库的功能是否比紧凑框架受到更多限制。

我正在尝试将CF / Windows CE应用程序(在手持设备上运行)移植到Xamarin解决方案,该解决方案将定位于Android,iOS,Windows Phone以及其他东西。

但是,我遇到的问题之一是该旧代码(在CF下工作):

public static List<string> GetXMLFiles(string fileType, string startingDir)
{
    const string EXTENSION = ".XML";
    string dirName = startingDir;
    // call it like so: GetXMLFiles("ABC", "\\");  <= I think the double-whack is what I need for Windows CE device...am I right?
    var fileNames = new List<String>();
    try
    {
        foreach (string f in Directory.GetFiles(dirName))
        {
            string extension = Path.GetExtension(f);
            if (extension != null)
            {
                string ext = extension.ToUpper();
                string fileNameOnly = Path.GetFileNameWithoutExtension(f);
                if (fileNameOnly != null &&
                    ((ext.Equals(EXTENSION, StringComparison.OrdinalIgnoreCase)) &&
                     (fileNameOnly.Contains(fileType))))
                {
                    fileNames.Add(f);
                }
            }
        }
        foreach (string d in Directory.GetDirectories(dirName))
        {
            fileNames.AddRange(GetXMLFiles(fileType, d));
                // from Brad Rem's answer here: http://stackoverflow.com/questions/22186198/why-is-this-function-returning-nothing-although-there-is-a-match/22186351?noredirect=1#22186351
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
    return fileNames;
}


...不会在Xamarin / CPL解决方案中进行编译。我得到“当前上下文中不存在名称'Directory'”,然后右键单击该词不提供“解析”选项。

有没有办法让PCL识别“目录”,还是必须完全重写代码?如果是后者,那么有人会建议/代替使用什么吗?

相关地,是否存在一个URL,该URL可以向我显示PCL中[不可用]的内容,和/或一个站点,可以显示所提供的代码块中有多少是“ PCL就绪的”?

更新

this article中的第一张图像非常有启发性。稍后,它专门讨论PCL方案中不存在“目录”的问题。

更新2

我从下面下载了Daniel Plaisted引用的PCLStorage软件包,以允许我访问PCL项目中的文件系统。

以下载页面[http://pclstorage.codeplex.com/]开头的示例代码为起点,到目前为止,我已经做到了:

public async Task<List<string>> GetXMLFiles(string fileType, string startingDir)
{
    const string EXTENSION = ".XML";

    IFolder rootFolder = FileSystem.Current.LocalStorage;
    IFolder folder = await rootFolder.GetFolderAsync(startingDir, CreationCollisionOption.OpenIfExists); //CreateFolderAsync(startingDir, CreationCollisionOption.OpenIfExists);
    List<string> fileNames = await folder.GetFilesAsync(EXTENSION);
    return fileNames;
}


...但是“ EXTENSION”作为GetFilesAsync()的arg不正确。我明白了,“参数1:无法从'string'转换为'System.Threading.CancellationToken'”

那么,要获取所有* .XML文件到文件夹,我需要做什么?

更新3

这样可以编译,但是我完全不确定这是正确的方法,除了它只是从文件夹中获取所有文件,而不仅仅是与“ * .XML”匹配的文件之外:

public async Task<List<IFile>> GetXMLFiles(string fileType, string startingDir)
{
    const string EXTENSION = ".XML";

    IFolder rootFolder = FileSystem.Current.LocalStorage;
    IFolder folder = await rootFolder.GetFolderAsync(startingDir, System.Threading.CancellationToken.None);
    IList<PCLStorage.IFile> fileNames = await folder.GetFilesAsync(System.Threading.CancellationToken.None);

    return fileNames.ToList();
}

最佳答案

Windows Phone应用程序不使用文件系统进行操作
  系统,并且只能使用隔离存储来持久化和
  访问文件,因此该名称空间不提供任何其他功能
  功能。


http://msdn.microsoft.com/en-us/library/windowsphone/develop/system.io%28v=vs.105%29.aspx

关于c# - 我需要做什么才能使此代码在可移植类库中工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22615794/

10-13 06:47