https://github.com/Esri/arcgis-runtime-samples-dotnet 示例 我正在探索可通过上述链接获得的 xamarin 示例。此处称为生成地理数据库的一个示例显示了如何生成地理数据库并将其本地存储在设备上。
问题: 我正在运行 UWP 应用程序的示例,但它会中断显示。 System.IO.FileLoadException:“文件异常:提供的文件路径包含不存在的目录。” 我已经调查了这个问题,这是我的发现:提供给的文件路径“_gdbPath”
_generateGdbJob = _gdbSyncTask.GenerateGeodatabase(generateParams, _gdbPath);
使用以下方法获得:
private string GetGdbPath()
{
// Set the platform-specific path for storing the geodatabase
String folder = "";
#if NETFX_CORE //UWP
folder = Windows.Storage.ApplicationData.Current.LocalFolder.Path.ToString();
#elif __IOS__
folder = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
#elif __ANDROID__
folder = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
#endif
// Set the final path
return Path.Combine(folder, "wildfire.geodatabase");
}
现在,GbdPath 位置正在设计中,并且是正确的。我实际上打开了路径,并且我尝试在路径/文件夹中创建一个文件,如下所示:
async void WriteTimestamp()
{
Windows.Globalization.DateTimeFormatting.DateTimeFormatter formatter =
new Windows.Globalization.DateTimeFormatting.DateTimeFormatter("longtime");
StorageFile sampleFile = await localFolder.CreateFileAsync("wildfire.geodatabase",
CreationCollisionOption.ReplaceExisting);
await FileIO.WriteTextAsync(sampleFile, formatter.Format(DateTime.Now));
}
它工作并成功创建了文件。因此,文件系统是可访问的。此外,我在 Android 上进行了一些修改/更改,我让它在这里工作。
问: 在我的情况下UWP平台有什么问题(我没有测试过IOS)?
更新:
我做了进一步的研究,发现 GeodatabaseSyncTask 类 GenerateGeodatabase 方法中可能存在一个错误(我将报告)。如果 Windows 10 配置为将新内容存储在另一个位置(默认 c: 驱动器除外),它无法找到 LocalState 文件夹,就像我的情况一样, 请参见此处。因此,如果 Windows 10 配置为将应用程序内容存储在另一个驱动器上(就像我的情况一样),上面提到的类就看不到它(仅基于观察,我没有反编译它)。Windows 10 将内容存储在 WpSystem... 文件夹中的另一个驱动器上。系统将创建一个名为 LocalState junction的快捷方式,如果您使用命令提示符 cmd 探索默认位置,则指向自定义位置。
在修复之前,我不知道什么是最好的解决方法。