Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在远程MATLAB过程中从本地机器读取数据_C#_Matlab_Visual Studio_Remote Access - Fatal编程技术网

C# 在远程MATLAB过程中从本地机器读取数据

C# 在远程MATLAB过程中从本地机器读取数据,c#,matlab,visual-studio,remote-access,C#,Matlab,Visual Studio,Remote Access,我已经创建了一个基于c的GUI,它可以在远程服务器上启动编译后的MATLAB可执行文件。我正在尝试将数据从本地计算机读取到可执行文件,但收到无效文件名错误无效文件标识符。引用本地计算机时,使用fopen生成有效的文件标识符 我已经测试过直接在远程服务器上运行可执行文件并引用本地计算机的数据,并获得了成功,问题似乎是从不同的环境初始化进程,然后要求进程引用回原始环境,可能需要某种登录 服务器和本地计算机都连接到我们公司的网络,因此我读取远程数据的方法是引用计算机名称作为驱动器,即用\\SERVER

我已经创建了一个基于c的GUI,它可以在远程服务器上启动编译后的MATLAB可执行文件。我正在尝试将数据从本地计算机读取到可执行文件,但收到无效文件名错误无效文件标识符。引用本地计算机时,使用fopen生成有效的文件标识符

我已经测试过直接在远程服务器上运行可执行文件并引用本地计算机的数据,并获得了成功,问题似乎是从不同的环境初始化进程,然后要求进程引用回原始环境,可能需要某种登录

服务器和本地计算机都连接到我们公司的网络,因此我读取远程数据的方法是引用计算机名称作为驱动器,即用\\SERVER1\替换c:\

我用来初始化远程进程的代码是:

connectionOptions connOptions = new ConnectionOptions();

connOptions.Username = textBox4.Text;

connOptions.Password = textBox3.Text;

connOptions.Impersonation = ImpersonationLevel.Impersonate;

connOptions.EnablePrivileges = true;

ManagementScope manScope = new ManagementScope("\\\\SERVER01\\ROOT\\CIMV2", connOptions);

manScope.Connect();

ObjectGetOptions objectGetOptions = new ObjectGetOptions();

ManagementPath managementPath = new ManagementPath("Win32_process");

ManagementClass processClass = new ManagementClass(manScope, managementPath, objectGetOptions);



object[] methodArgs = { "\\\\SERVER01\\folder1\\Data\\Files\\matlabProgram.exe " + params1.ToString() };

object result = processClass.InvokeMethod("Create", methodArgs);
在params1中传递给程序的参数集包含引用本地计算机上的文件和文件夹的文件路径,即\\LOCAL01\

使用常用的进程启动方法在服务器内运行GUI:

Process p = null;

p = System.Diagnostics.Process.Start("\\\\SERVER01\\folder1\\Data\\Files\\matlabProgram.exe ", params1);
引发错误的MATLAB代码为:

f = fopen('\\LOCAL01\folder1\Data\Files\statuslog.txt','w');

fprintf(f,'%s','Sup');
作为一名真正的c编程初学者,我非常感谢对这个问题的任何见解。谢谢


更新:因此,根据@Dennis在其答案中的说法,您不能引用远程机器的非本地路径。除了必须将所需文件复制到远程机器之外,是否还有其他解决方法

值得给出一段最少的代码来演示这个问题,以及您的错误消息,以及可能来自服务器的任何相关日志消息。您的连接技术可能很重要,例如,您是否正在ssh中运行命令行,或者通过专门构建的库/API进行远程控制访问。再加上实际的代码和错误消息,你会找到一个更好的人谁可能知道你的具体问题。谢谢尼尔,将作出必要的编辑。稍后我将尝试添加代码片段,很遗憾,从我的笔记本电脑登录此网站时遇到了一些问题。您是否有本地计算机对此文件夹的写入权限?从本地计算机启动matlab exe时,程序将使用本地凭据启动。作为调试步骤,请尝试以只读模式打开该文件,或者仅检查matlab exe中是否存在该文件。如果成功的话,你就会知道这是一个写权限问题。谢谢@Hoki。我不确定这是否是写入权限问题,因为我可以使用不同的凭据从其他环境写入本地计算机。该文件夹已设置为在测试期间共享给网络上的所有人。我通过直接从Matlab的另一个桌面写入本地机器上的文本文件,然后在服务器上运行Matlab编译的脚本写入本地文本文件来测试这一点。当在本地运行一个程序,在服务器上启动脚本,然后无法写入本地时,问题就会出现。然后尝试先使用硬编码路径,而不是使用硬编码路径。这将使用户手动导航到该文件夹。我认为如果您需要输入额外的凭据,应该会提示您。