There is a bug in 20H2.NTFS or .NET Framework 4.8 System.IO.FileInfo() and File.Copy() (at least).
I wrote a C# program that walked the entire directory tree for a NTFS volume that had over 1.5M files. Once I had this list of files, I called System.IO.FileInfo on each one and found 166 files where FileInfo.Exists==false, which implies exactly what it says, that file does not exist. However, it does exist, I can see them with File Explorer, select Properties and get valid results, and I have verified their contents(a few are .MP4 and they play fine).
I figured there was some corruption in the NTFS tables, so I added recovery code to my program that was going to copy each file to \tmp, delete the original, then copy back (figuring this would create a fresh, valid entry).
However, the first File.Copy throws an exception, "Could not find a part of the path". All failures are crazy long paths, ex:
'Z:\backups\desktop\Cdrive\Program Files (x86)\Adobe\Adobe After Effects CS4\Support Files\Plug-ins\Effects\Synthetic Aperture(Color Finesse 2 Support)\Color Finesse 2\Color Finesse Presets\Gels\GamColor CineFilters\GamColor CineFilters_1-4 Plus Green.cfpreset'. I was suspicious of the 2nd set of parenthesis , "(Color Finesse 2 Support)". I renamed that directory, using File Explorer, removing the parenthesis , and now this file behaves normally!!!
Parenthesis are valid in directory and filenames. The files do exist and their contents are fine!!!
Obvious bug in NTFS or foundation classes!!!