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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:41:49