如何在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
相关产品推荐
相关产品推荐

