Beispiel #1
0
        static async Task Xmp2()
        {
            // you can use CancellationToken so that the app user can request cancel on UI.
            CancellationToken ct = CancellationToken.None;

            await foreach (var e in Fsentry.VisitAsync("../.", ct))
            {
                if (e.Event == FsentryEvent.EnterDir)
                {
                    Console.WriteLine($"ENTER: {e.FullPathString}");

                    // you can do this:
                    // if (ShouldSkip(e.RelativePath))
                    // {
                    //     Console.WriteLine($"skip visiting into the dir:{e.RelativePath}");
                    //     e.Command = FentryCommand.SkipDirectory;
                    //     continue;
                    // }
                }
                else if (e.Event == FsentryEvent.File)
                {
                    Console.WriteLine($"FILE : {e.FullPathString}");
                }
                else if (e.Event == FsentryEvent.LeaveDir)
                {
                    Console.WriteLine($"LEAVE: {e.FullPathString}");
                }
            }
        }
Beispiel #2
0
        public async Task Test2Async()
        {
            // ディレクトリやファイルを実際のファイルシステム上に用意
            var temp = GetTempDir();

            using var deleteLater = new Defer(() => CleanupTempDir(temp));
            var pathSet = new HashSet <string>()
            {
                "file0.txt",
                "dir1/file1-1.txt",
                "dir1/file1-2.txt",
                "dir2",
                "dir3-1/dir3-2/file3-1.txt",
                "dir3-1/dir3-2/dir3-3/file3-2.txt",
            };

            foreach (var path in pathSet)
            {
                await SetupPathAsync(temp.Combine(_AsItems(path)));
            }

            // テスト実行。見つかったディレクトリやファイルを変数 pathSet から消していく
            // ただし、dir3-1 の中身を無視してみる
            var skipCount = 0;

            await foreach (var entry in Fsentry.VisitAsync(temp))
            {
                Assert.IsFalse(entry.RelativePath.IsAbsolute);

                var relPathStr = entry.RelativePath.ToString("/");

                if (entry.Event == FsentryEvent.EnterDir)
                {
                    if (relPathStr.Contains("dir3-1"))
                    {
                        entry.Command = FsentryCommand.SkipDirectory;
                        skipCount++;
                        continue;
                    }

                    if (pathSet.Contains(relPathStr))
                    {
                        pathSet.Remove(relPathStr);
                    }
                }
                else if (entry.Event == FsentryEvent.File)
                {
                    Assert.IsTrue(pathSet.Contains(relPathStr));
                    pathSet.Remove(relPathStr);
                }
            }

            // 1度だけ skip したはず。"dir3-1" を見つけてすぐ skip したので、中のディレクトリの探索はしていないはず
            Assert.AreEqual(1, skipCount);

            // pathSet は 2 つ残ったはず
            Assert.AreEqual(2, pathSet.Count);
        }
Beispiel #3
0
        public async Task Test1Async()
        {
            // ディレクトリやファイルを実際のファイルシステム上に用意
            var temp = GetTempDir();

            using var deleteLater = new Defer(() => CleanupTempDir(temp));
            var pathSet = new HashSet <string>()
            {
                "file0.txt",
                "dir1/file1-1.txt",
                "dir1/file1-2.txt",
                "dir2",
                "dir3-1/dir3-2/file3-1.txt",
                "dir3-1/dir3-2/dir3-3/file3-2.txt",
            };

            foreach (var path in pathSet)
            {
                await SetupPathAsync(temp.Combine(_AsItems(path)));
            }

            // テスト実行。見つかったディレクトリやファイルを変数 pathSet から消していく
            await foreach (var entry in Fsentry.VisitAsync(temp))
            {
                Assert.IsFalse(entry.RelativePath.IsAbsolute);

                var relPathStr = entry.RelativePath.ToString("/");

                if (entry.Event == FsentryEvent.EnterDir)
                {
                    if (pathSet.Contains(relPathStr))
                    {
                        pathSet.Remove(relPathStr);
                    }
                }
                else if (entry.Event == FsentryEvent.File)
                {
                    Assert.IsTrue(pathSet.Contains(relPathStr));
                    pathSet.Remove(relPathStr);
                }
            }

            // pathSet は全て無くなったはず
            Assert.AreEqual(0, pathSet.Count);
        }