【发布时间】:2018-04-30 15:02:10
【问题描述】:
如果您将 DirectoryInfo 实例从 PC1 发送到 PC2,GetFiles 或 GetDirectories 是否仍然有效?
public void DirTest()
{
//On first PC:
DirectoryInfo driveC = new DirectoryInfo(@"C:\randomdir\");
BinaryFormatter bf = new BinaryFormatter();
MemoryStream ns = new MemoryStream();
bf.Serialize(ns, driveC);
SendStream(ns); //Sending the stream to the second PC
//On second PC:
ns = ReceiveStream(); //Receiving the stream from the first PC
ns.Position = 0;
DirectoryInfo di = (DirectoryInfo)bf.Deserialize(ns);
//Does this work?
foreach (FileInfo item in di.GetFiles())
{
Debug.WriteLine(item);
}
}
如果您在同一台 PC 上执行该代码,它可以工作,但我没有环境来测试这是否可以在 2 台不同的电脑上工作。
也许 SubDirectories 和 Files 保存在 directoryinfo 类的数组中,因为我找到了这个序列化函数:
【问题讨论】:
-
您希望得到来自 PC1 或 PC2 的信息吗?你到底关心什么?序列化还是检索信息?
-
我认为你正处于危险的境地,试图序列化你不知道以这种方式使用是安全的类,甚至可能没有允许你正确序列化的构造函数。为什么不使用您实际需要的属性创建您自己的类并通过网络发送它们呢?当然,除非它是网络驱动器,否则您期望
DirectoryInfo在另一台机器上有用仍然很奇怪。 -
Patrick Hofman 我想知道来自 PC1 的 DirectoryInfo 实例是否仍在 PC2 上工作。如果 GetDirectories() 仍然返回 PC1 的目录
-
@DavidG
DirectoryInfo被特别标记为Serializable,因此以这种方式使用它是安全的,但是它不像 OP 所期望的那样运行。 -
@RonBeyer 你对“安全”的定义与我的不同,尤其是当唯一真正重要的字段是目录路径时。
标签: c# serialization directoryinfo