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

如何在Xamarin Forms中读取PCL文件夹中的CSV文件

解决嵌入资源CSV文件读取问题

哦,这个问题我碰到过!你把CSV设成嵌入资源后,不能直接用File.ReadAllLines()读取——因为嵌入资源不是文件系统里的物理文件,它是打包在你的程序集(.exe/.dll)里面的,File类是用来访问磁盘文件的,自然找不到啦。

要读取嵌入资源里的CSV内容并得到string[] lines,你得用程序集的资源读取方法,步骤如下:

1. 确认嵌入资源的完整名称

首先要搞清楚嵌入资源的完整限定名称,它的格式一般是:项目命名空间.文件夹路径.文件名。比如你的项目命名空间是PrinterTestSample,CSV放在Csv文件夹下叫UserData.csv,那完整名称就是PrinterTestSample.Csv.UserData.csv。

如果不确定,你可以用下面的代码列出当前程序集所有的嵌入资源,找到你要的那个:

using System.Reflection;

var assembly = Assembly.GetExecutingAssembly();
foreach (var name in assembly.GetManifestResourceNames())
{
    Console.WriteLine(name);
}

2. 读取嵌入资源并转换为string[] lines

用Assembly.GetManifestResourceStream()获取资源流,再用StreamReader读取内容,最后分割成行数组:

using System.Reflection;
using System.IO;

// 获取当前程序集
var assembly = Assembly.GetExecutingAssembly();
// 替换成你的嵌入资源完整名称
string resourceName = "PrinterTestSample.Csv.UserData.csv";

string[] lines;
using (Stream stream = assembly.GetManifestResourceStream(resourceName))
{
    if (stream == null)
    {
        throw new FileNotFoundException("找不到指定的嵌入资源", resourceName);
    }
    using (StreamReader reader = new StreamReader(stream))
    {
        string fullContent = reader.ReadToEnd();
        // 处理不同系统的换行符,确保分割正确
        lines = fullContent.Split(new[] { "\r\n", "\n", "\r" }, StringSplitOptions.None);
    }
}

// 现在lines就是你要的结果啦

小提示

  • 确保CSV文件的“生成操作”确实设置为“嵌入的资源”(在Visual Studio里右键文件→属性→生成操作);
  • 如果你的文件没有放在子文件夹里,那完整名称就是项目命名空间.文件名,比如PrinterTestSample.UserData.csv。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 18:55:15