You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HoloLens文本文件读写异常:可写入但无法读取(Unity、HoloLens、C#)

解决HoloLens上Unity文本文件读取问题

嘿,看你的代码已经搭好了写入的架子,但读取逻辑没跟上对吧?在HoloLens运行的UWP环境里,文件操作得严格遵循异步规范,还要注意路径和权限的限制,我帮你把读取逻辑补全,顺便优化下整体代码结构:

问题根源

你的写入用了异步Task,但读取同样需要用UWP的异步API,而且不能忽略异步操作的等待——如果直接在同步方法里调用异步读取,很可能还没读完就去拿结果,自然得到空内容。另外,要保证读写用的是同一个应用私有存储目录,HoloLens对文件系统的权限限制比较严,不能随便用其他路径。

完整可运行的读写代码

直接替换你的现有代码就行:

using UnityEngine;
using System.Threading.Tasks;
using Windows.Storage;
using System.IO;

public class FileInOut : MonoBehaviour 
{ 
    string plainText = ""; 
    TextMesh textmesh; 

    void Start () 
    { 
        textmesh = GameObject.Find ("Text").GetComponent<TextMesh>(); 
        textmesh.text = "Hallo"; // 先测试文本显示正常

        // 启动异步读写流程(Start不能直接加async,所以用下划线忽略返回值)
        _ = RunReadWriteOperations();
    }

    // 统一处理异步读写的方法,这里可以加async
    async Task RunReadWriteOperations()
    {
        // 先写入测试内容
        await WriteToFile("MyTestFile.txt", "HoloLens文件读写测试成功!");
        
        // 再读取文件内容
        plainText = await ReadFromFile("MyTestFile.txt");
        
        // 把读取到的内容显示出来
        textmesh.text = plainText;
    }

    // 异步写入方法
    async Task WriteToFile(string fileName, string content)
    {
#if WINDOWS_UWP
        // 获取应用的本地存储目录,HoloLens有权限访问
        StorageFolder localFolder = ApplicationData.Current.LocalFolder;
        // 创建或覆盖文件
        StorageFile file = await localFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);
        // 写入文本
        await FileIO.WriteTextAsync(file, content);
#endif
    }

    // 异步读取方法,返回读取到的文本
    async Task<string> ReadFromFile(string fileName)
    {
#if WINDOWS_UWP
        try
        {
            StorageFolder localFolder = ApplicationData.Current.LocalFolder;
            // 获取指定文件
            StorageFile file = await localFolder.GetFileAsync(fileName);
            // 读取文本内容
            return await FileIO.ReadTextAsync(file);
        }
        catch (FileNotFoundException)
        {
            // 处理文件不存在的情况
            return "错误:未找到目标文件";
        }
        catch (System.Exception ex)
        {
            // 捕获其他异常
            return $"读取失败:{ex.Message}";
        }
#endif
        return "";
    }
}

几个必须注意的点

  • 异步操作的正确调用:Unity的Start方法不能标记为async,所以我们用一个单独的异步方法RunReadWriteOperations来处理读写,然后用_ = 方法名()的方式启动,避免阻塞主线程。
  • 目录选择:必须用ApplicationData.Current.LocalFolder,这是UWP应用的私有目录,HoloLens默认允许访问,不要用Unity的Application.persistentDataPath(虽然在UWP下指向同一个位置,但直接用UWP API更可靠)。
  • 异常处理:读取时加了异常捕获,避免因为文件不存在、权限问题导致应用崩溃,同时能直观看到错误原因。
  • 文件覆盖选项:写入时用CreationCollisionOption.ReplaceExisting会覆盖旧文件,如果需要追加内容,可以换成CreationCollisionOption.OpenIfExists,然后用FileIO.AppendTextAsync。

验证步骤

部署到HoloLens后,你会看到TextMesh先显示"Hallo",几秒后切换成读取到的测试内容。如果显示错误信息,先检查文件名是否拼写正确,或者确认写入操作是否成功(可以在写入后加个日志输出验证)。

内容的提问来源于stack exchange,提问作者XyDrK Rulof

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:25:11