使用R.NET在C#中调用R脚本读取CSV时遇文件连接错误的解决方法
解决R.NET读取CSV时"cannot open the connection"的问题
先看你代码里最明显的问题:第二个文件的路径里多了个空格!你写的是'C:/Users/isalah/Desktop/Fichiers_CRM /Fichier_csv/Achats1.csv',注意Fichiers_CRM后面的那个空格,这会直接导致R找不到对应文件,这大概率是当前报错的核心原因。
除了这个显性错误,我整理了几个通用的排查和优化步骤,帮你彻底解决这类问题:
1. 先修复路径中的低级错误
- 立刻去掉第二个路径里
Fichiers_CRM后面的多余空格,确保路径和实际文件夹完全匹配 - 把所有路径复制到文件资源管理器里验证,确认文件确实存在,文件名(包括大小写、扩展名)没有拼写错误
- 可以先在R控制台里单独运行对应的
read.table命令,验证路径是否有效——如果R控制台都读不了,那C#里肯定也不行
2. 规范REngine的初始化与使用
你的代码缺少了R.NET官方要求的初始化步骤,这可能引发一些隐性问题。建议改成下面的标准写法:
using RDotNet; namespace ConsoleApp11 { class Program { static void Main(string[] args) { // 先设置R环境变量,这是初始化的必要步骤 REngine.SetEnvironmentVariables(); // 使用using块自动管理引擎资源,避免内存泄漏 using (REngine engine = REngine.GetInstance()) { engine.Initialize(); // 把公共路径提取成变量,减少重复手写的错误 string csvRootPath = @"C:/Users/isalah/Desktop/Fichiers_CRM/Fichier_csv/"; // 用变量拼接路径,更易维护 DataFrame testData = engine.Evaluate($"DataIns <- read.table('{csvRootPath}Diagnostic.csv', header=TRUE, sep=';')").AsDataFrame(); DataFrame dataAch = engine.Evaluate($"DataAch <- read.table('{csvRootPath}Achats1.csv', header=TRUE, sep=';')").AsDataFrame(); DataFrame dataDia = engine.Evaluate($"DataDia <- read.table('{csvRootPath}Diagnostic.csv', header=TRUE, sep=';')").AsDataFrame(); DataFrame dataCad = engine.Evaluate($"DataCad <- read.table('{csvRootPath}CADEAUX.csv', header=TRUE, sep=';')").AsDataFrame(); double columnCount = testData.ColumnCount; } } } }
这个写法的优势:
- 补充了
REngine.SetEnvironmentVariables()和engine.Initialize(),符合R.NET的官方规范 - 提取公共路径变量,避免重复手写路径导致的错误
- 用
using语句自动释放引擎资源,避免内存泄漏
3. 排查文件权限与特殊情况
如果路径修复后还是报错,检查以下几点:
- 运行C#程序的用户是否有读取该文件的权限(比如VS是否以管理员身份运行,或者文件所在文件夹是否被设置为只读)
- 尝试把文件复制到更简单的路径(比如
C:/temp/Achats1.csv)再测试,排除路径过长或包含特殊字符的问题 - 确认文件没有被其他程序占用(比如Excel打开了这个CSV文件,会导致R无法读取)
4. 统一R的工作目录(可选优化)
R的工作目录可能和C#程序的工作目录不一致,虽然你用的是绝对路径,但统一工作目录可以简化代码:
// 设置R的工作目录到CSV文件夹 engine.Evaluate($"setwd('{csvRootPath}')"); // 之后直接用文件名读取即可 DataFrame dataAch = engine.Evaluate("DataAch <- read.table('Achats1.csv', header=TRUE, sep=';')").AsDataFrame();
先从修复第二个路径的空格开始试,这应该能解决你当前的问题!
内容的提问来源于stack exchange,提问作者User2018
相关产品推荐
相关产品推荐

