3

我需要从外部驱动程序(例如 USB 密钥)自动备份我的文件当插入驱动程序时。要知道何时插入新的 USB 或硬盘驱动器我使用了一个 observable,问题是我知道的唯一方法获取连接的驱动程序是通过使用以下功能:

DriveInfo.GetDrives();

返回包含每个链接驱动程序的列表:我实现此函数以了解何时连接了新的大容量存储器:

       public static IObservable<DriveInfo> ObserveNewDrivers() =>
        Observable.Interval(TimeSpan.FromSeconds(5))
            .Select(_ => DriveInfo
                .GetDrives())
            .DistinctUntilChanged()
            .Buffer(2)
            .SelectMany(buff => buff.Aggregate(
                (a, b) => b.Except(a).ToArray()));

它不起作用,因为我只比较了一对二对二驱动程序(使用“除外”功能) 数值示例:1,2;3.4;5.6;. 这样,如果我重新插入相同的驱动程序,我将两次备份它,因为我不会将第三个驱动程序与第一个驱动程序进行比较(例如)。

我认为我需要的行为是 rxjs 中的成对运算符,而不是 .net 中的行为,即: 1.2;2.3;3.4;4.5;5.6;ETC

附言。抱歉,如果我不太清楚并且我的英语很差:^)

感谢您的任何回答

4

1 回答 1

3

.NET 中的缓冲区有一个带有 2 个参数的构造函数,允许您执行“重叠”缓冲区。

如果我对您面临的问题的理解是正确的,您将希望使用:

.Buffer(2, 1)

这意味着每 1 个新值将发出两个值。更多信息在这里:

http://www.introtorx.com/Content/v1.0.10621.0/13_TimeShiftedSequences.html#Buffer

请参阅“按计数重叠缓冲区”部分。

于 2018-03-25T12:46:05.647 回答