我试图列出Windows 7下的所有文件在C:\ Windows \ System32 \ oobe \信息\背景通过调用如下因素:找不到路径的一部分'C:\ Windows \ System32 \ oobe \ info \ Backgrounds
const string logonScreenBackgroundPath = "C:\\Windows\\System32\\oobe\\info\\Backgrounds";
DirectoryInfo dInfo = new DirectoryInfo(logonScreenBackgroundPath);
string[] backgroundFiles = Directory.GetFiles(logonScreenBackgroundPath);
但是我上的GetFiles异常拨打:找不到路径的一部分“C:\ WINDOWS \ SYSTEM32 \ OOBE \信息\背景
我验证了该文件夹存在并且有文件,我在命令提示符下对其进行了cd化,并且一切正常,但c#调用失败。
在C:\ Windows \ System32 \ oobe \上调用GetFiles虽然工作正常。就文件夹属性而言,\ oobe和\ info之间没有什么不同。
经过进一步调查,这看起来像一个64位问题。当我为“AnyCpu”构建项目时,找到的文件夹没有问题。问题是我的项目需要编译x86而不是AnyCpu,因为依赖关系。
SOLUTION: 看起来像这是一个已知的问题,MS已经为它发布了一个修补程序。问题是由于文件系统重定向。
我现在调用线程上禁用重定向有以下几点:
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool Wow64DisableWow64FsRedirection(ref IntPtr ptr);
IntPtr ptr = new IntPtr();
bool isWow64FsRedirectionDisabled = Wow64DisableWow64FsRedirection(ref ptr);
我对Window的权限结构知之甚少,但却是所有用户都可读的文件夹?你的应用程序在什么权限下运行? – Grambot
您的字符串中只有单个\字符。错字? – tinman
这只是一个错误,当我的代码复制到这个web窗体时,反斜杠被正确转义 – user577240