我開發使用Unity hololens一個應用程序中,我從一個API下載一個CSV,然後分析它等我發現,你不能使用WebClient
類來下載CSV和StreamReader
類來解析CSV,如果您正在構建Windows應用商店應用程序(WSA)。我已經能夠使用受支持的WWW
類替換WebClient。我想使用此代碼複製我在StreamReader的在做,但它不工作這麼好:Web客戶端和StreamReader類在構建Windows應用商店 - 生成錯誤在Unity
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並且在Unity編輯器中工作良好。有什麼建議麼?
#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通用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是貶值的。 – Smartis
如果你想在prj中獲得你可以使用AppData.Current.LoacalFolder的文件,並且你不應該使用'sp500'作爲url來獲取文件。 – lindexi
即使您編譯此代碼,也無法在安裝位置之外讀取('「.. \」'試圖從您的目錄結構中退出)。如果你想使用'await',你也需要'async'方法 - 這不是整個代碼示例。 –