我正在Pi 3上开发一个相当复杂的过程控制后台应用程序(使用c#,VC 2015)。这是以模块化方式开发和测试的(显示器,用户输入,gpio扩展板,各种类型的传感器,继电器,网络通信等)。每个模块都构建为一个单独的DLL,并使用自己的后台测试应用程序进行测试。
我的问题是我需要在所有模块中维护一组通用数据,尤其是一组应用程序参数。还有本地存储作为结果和日志记录的缓存。因此,几个不同的应用程序需要在开发期间访问这些数据 - 但一次只能访问一个。显然在最终项目中,会有一个应用程序,所以没问题。
我很惊讶地发现Win IoT似乎不允许不同应用程序访问简单文件。应用程序服务和其他应用程序间通信似乎都处于事务级别,在此处不合适。构建应用程序服务工具来处理所有I / O将是乏味的(最终不需要)。
有没有人知道如何理智地管理这种情况,拜托?
答案 0 :(得分:2)
由于UWP应用的File access permissions。从本地存储中的文件读取数据似乎无法访问。
因此,如果您愿意使用连接到Raspberry Pi的可移动设备(外部存储)并将您的应用程序参数存储在文件(如文本文件)中,并从您的应用程序中读取数据。
我在桌面上测试以下代码(UWP app)并从多个应用程序成功读取数据。我相信你可以从一个应用程序读取Raspberry Pi上的数据,但我没有测试多个应用程序。你可以尝试一下。如果有任何疑虑,请随时告诉我。
Task.Run( async () =>
{
var removableDevices = KnownFolders.RemovableDevices;
var externalDrives = await removableDevices.GetFoldersAsync();
var drive0 = externalDrives[0];
var testFolder = await drive0.GetFolderAsync("test");
var SharedDateFile = await testFolder.GetFileAsync("data.txt");
var data = await FileIO.ReadTextAsync(SharedDateFile);
System.Diagnostics.Debug.WriteLine(data);
});
在应用清单中,您需要指定可移动存储功能并注册至少一个文件类型关联声明。
<强>更新强>
使用publisher folder是更好的解决方案。首先,在Package.appxmanifest中添加以下扩展名:
<Extensions>
<Extension Category="windows.publisherCacheFolders">
<PublisherCacheFolders>
<Folder Name="Folder1"/>
</PublisherCacheFolders>
</Extension>
</Extensions>
然后像这样写下和读取文件:
//Write file
var folder = Windows.Storage.ApplicationData.Current.GetPublisherCacheFolder("Folder1");
var file = await folder.CreateFileAsync("settings.txt", Windows.Storage.CreationCollisionOption.OpenIfExists);
await FileIO.WriteTextAsync(file,"Hello writen by app1");
//Read file
var folder = Windows.Storage.ApplicationData.Current.GetPublisherCacheFolder("Folder1");
var file = await folder.GetFileAsync("settings.txt");
var text = await FileIO.ReadTextAsync(file);
System.Diagnostics.Debug.WriteLine(text);