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

跨PC传输DirectoryInfo实例后,GetFiles等方法能否正常工作?

关于跨机器传输DirectoryInfo实例的问题解答

先来看你提出的两个核心问题,以及对应的示例代码:

  1. DirectoryInfo实例在另一台计算机上是否仍可正常工作?
  2. 若将PC1上的DirectoryInfo实例传输至PC2,调用GetFiles或GetDirectories方法是否仍能正常运行?

附示例代码:

public void DirTest() {
    //在第一台电脑上:
    DirectoryInfo driveC = new DirectoryInfo(@"C:\randomdir\");
    BinaryFormatter bf = new BinaryFormatter();
    MemoryStream ns = new MemoryStream();
    bf.Serialize(ns, driveC);
    SendStream(ns); //将流发送至第二台电脑
    //在第二台电脑上:
    ns = ReceiveStream(); //接收来自第一台电脑的流
    ns.Position = 0;
    DirectoryInfo di = (DirectoryInfo)bf.Deserialize(ns);
}

1. DirectoryInfo实例在另一台计算机上是否仍可正常工作?

答案是不行。DirectoryInfo是.NET专门用来和本地文件系统交互的类,它的所有属性和方法都依赖于创建它的那台机器的文件系统环境。当你把它序列化传输到另一台电脑后,这个实例保存的还是原机器的目录路径(比如示例里的C:\randomdir\),而目标机器的文件系统大概率和原机器不匹配:要么路径不存在,要么路径对应的目录内容、权限完全不同。此时这个实例的大部分属性(比如Exists)都会返回错误的结果,基本失去了实用价值。

2. 调用GetFiles或GetDirectories方法是否仍能正常运行?

同样无法正常达到你的预期,甚至会直接抛出异常:

  • 如果PC2上没有C:\randomdir\这个目录,调用这些方法会立刻抛出DirectoryNotFoundException;
  • 就算PC2上碰巧有同名目录,返回的也是PC2本地该目录下的文件/子目录,和PC1上的目标目录完全无关;
  • 另外,还可能遇到权限问题:PC2的当前运行用户如果没有访问该目录的权限,会抛出UnauthorizedAccessException。

问题根源:DirectoryInfo不是用来传输的对象

你用BinaryFormatter序列化DirectoryInfo的方式,本质上只是把这个对象的基础元数据(比如路径字符串)传过去了,而不是目录的实际内容。DirectoryInfo本身并不存储目录里的文件列表,它只是一个“本地文件系统的访问工具”——离开了它创建时的本地环境,这个工具就没有作用了。

正确的做法

如果你的需求是要在PC2上获取PC1某目录的内容,应该:

  • 在PC1上主动调用GetFiles()/GetDirectories(),获取文件/目录的详细信息(比如路径、大小、创建时间等);
  • 把这些信息封装成一个自定义的可序列化对象(比如一个包含文件路径列表的DTO),或者直接序列化字符串列表;
  • 将这个序列化后的数据流传输到PC2;
  • 在PC2上反序列化后,直接处理这些传输过来的内容,而不是依赖DirectoryInfo实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:48:26