【发布时间】:2017-03-08 04:59:58
【问题描述】:
我正在使用 Unity 开发一个用于 hololens 的应用程序,在该应用程序中我从 API 下载 CSV,然后对其进行解析等。我发现您不能使用 WebClient 类来下载 CSV 和 StreamReader 类来下载如果您正在构建 Windows 应用商店应用程序 (WSA),请解析 CSV。我已经能够通过使用受支持的WWW 类来替换 WebClient。我正在尝试使用此代码来复制我在 StreamReader 中所做的事情,但效果不佳:
var Folder = Windows.ApplicationModel.Package.Current.InstalledLocation;
var sp500 = @"..\Hololens\Assets\FinanceData\MarketTickers\";
Folder = await Folder.GetFolderAsync(sp500);
// acquire file
var _File = await Folder.GetFileAsync("sp500.csv");
// read content
var _ReadThis = await Windows.Storage.FileIO.ReadTextAsync(_File);
这是完整的代码。我查看了平台相关编译页面 (https://docs.unity3d.com/Manual/PlatformDependentCompilation.html) 并添加了预处理器指令,以便我也可以统一运行脚本(在编辑器中),因为 WebClient 和 StreamReader 受支持并且在统一编辑器中工作正常。有什么建议吗?
#if !UNITY_WSA_10_0
using (var reader = new StreamReader(file))
{
while (!reader.EndOfStream)
{
var csvLine = reader.ReadLine();
var firstCommaIndex = csvLine.IndexOf(",");
var stock = csvLine.Substring(0, firstCommaIndex);
// In case there are symbols in the stock names that would not be recognized by Yahoo API
if (!tickers.Contains(stock) && !stock.Contains('/'))
{
tickers.Add(stock);
}
}
}
#else
var Folder = Windows.ApplicationModel.Package.Current.InstalledLocation;
var sp500 = @"..\Hololens\Assets\FinanceData\MarketTickers\";
Folder = await Folder.GetFolderAsync(sp500);
// acquire file
var _File = await Folder.GetFileAsync("sp500.csv");
// read content
var _ReadThis = await Windows.Storage.FileIO.ReadTextAsync(_File);
#endif
为 WSA Universal 10 SDK 构建时遇到的错误:
Assets/Scripts/FinanceFunctions.cs(59,33): error CS1525: Unexpected symbol `Folder'
Assets/Scripts/FinanceFunctions.cs(65,41): error CS1525: Unexpected symbol `Windows'
Assets\Scripts\FinanceFunctions.cs(65,29): error CS4032: The 'await' operator can only be used within an async method. Consider marking this method with the 'async' modifier and changing its return type to 'Task<string>'.
【问题讨论】:
-
他们不是在 UWP 10 中将“Folder”重命名为“StorageFolder”吗?我认为你的方法调用对于当前的 UWP SDK 来说是贬值的。
-
如果你想在prj中获取文件,你可以使用AppData.Current.LoacalFolder并且你不应该使用
sp500作为url来获取文件。 -
即使你编译了这段代码,你也不能在你安装的位置之外读取(
"..\"试图逃出你的目录结构)。如果你想使用await,你还需要有一个async方法——这不是整个代码示例。
标签: c# unity3d windows-store-apps win-universal-app hololens