I'm using csvHelper to create and save some csv file (containing data from the hololens' motion detection).
Thing is, I need to save the file somewhere into the HoloLens2 : I've seen some doc about file pickers, but as I am using csvHelper (and i'm also automatically naming the file), what I really need is a path, a string path.
I can't find anywhere the syntax of a path in HoloLens...
What works for now is to execute the script remotely on unity (so that the file is saved directly on my computer), but for the accuracy of my data, I would've like to deploy the app, and so save this file where the HoloLens2 have access.
Here's the bit of code that saves the file :
/// <summary>
/// Method <c>WriteInCsv</c> writes the records in a .csv file. Files are named by corresponding hand, and the dateTime of writing.
/// </summary>
/// <param name="records">List of all the saved data</param>
/// <param name="hand">Which hand has the data been recorded from : 0 for right hand, 1 for left hand. </param>
public void WriteInCsv(List<CoordCSV> records, int hand=0)
{
if (records.Count > 0)
{
string path = "C:\\Users\\AT04760\\Documents\\2022_HOLOLENS\\CSV Export\\test2_"; //"C:\\Data\\Users\\Mikael Sauriol\\Pictures\\test_";
string dateTime = System.DateTime.Now.Day + "-" + System.DateTime.Now.Month + "_" + System.DateTime.Now.Hour + "-" + System.DateTime.Now.Minute + "-" + System.DateTime.Now.Second;
if (hand == 1)
{
path += "LeftHand_" + dateTime + ".csv";
}
else
{
path += "RightHand_" + dateTime + ".csv";
}
using (var writer = new StreamWriter(path))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
csv.Context.RegisterClassMap<CoordMap>();
csv.WriteRecords(records);
}
}
}
Can anyone help ?
Thanks
--------------------EDIT---------------------- Here's what worked after Jay's Response :
public void WriteInCsv(List<CoordCSV> records, string folderName, int hand=0)
{
if (records.Count > 0)
{
string path = "test_"; //"C:\\Users\\AT04760\\Documents\\2022_HOLOLENS\\CSV Export\\test2_";
string dateTime = System.DateTime.Now.Day + "-" + System.DateTime.Now.Month + "_" + System.DateTime.Now.Hour + "-" + System.DateTime.Now.Minute + "-" + System.DateTime.Now.Second;
if (hand == 1)
{
path += "LeftHand_" + dateTime + ".csv";
}
else
{
path += "RightHand_" + dateTime + ".csv";
}
List<string> lines = new List<string>();
lines.Add("Finger,TimeStamp,Position,Rotation(Quaternion)");
foreach (CoordCSV data in records)
{
lines.Add(data.Finger +"," + data.Timestamp + "," + data.Position + "," + data.Rotation);
}
#if !UNITY_EDITOR && UNITY_WSA_10_0
UnityEngine.WSA.Application.InvokeOnUIThread(async () =>
{
Windows.Storage.StorageFolder folder;
if(Windows.Storage.AccessCache.StorageApplicationPermissions.FutureAccessList.ContainsItem(folderName)){
folder =
await Windows.Storage.AccessCache.StorageApplicationPermissions.FutureAccessList.GetFolderAsync(folderName);
}
else{
var folderPicker = new Windows.Storage.Pickers.FolderPicker();
folderPicker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.PicturesLibrary;
folderPicker.FileTypeFilter.Add("*");
folder = await folderPicker.PickSingleFolderAsync();
}
UnityEngine.WSA.Application.InvokeOnAppThread(async () =>
{
if (folder != null)
{
// Application now has read/write access to all contents in the picked folder
// (including other sub-folder contents)
Windows.Storage.AccessCache.StorageApplicationPermissions.FutureAccessList.AddOrReplace(folderName, folder);
using (StreamWriter writer = new StreamWriter(await folder.OpenStreamForWriteAsync(path, CreationCollisionOption.OpenIfExists)))
{
foreach(string line in lines){
await writer.WriteLineAsync(line);
}
}
}
}, false);
}, false);
#endif