gpt4 book ai didi

c# - 为什么路径即使在 "\\"之前包含 @ 也能正常工作

转载 作者:IT王子 更新时间:2023-10-29 04:49:09 24 4
gpt4 key购买 nike

我有点困惑。我认为 c# 中的“@”是一个符号,用于从字面上解释文本,如 @"C:\Users..."。它避免了双反斜杠的需要。

但是,如果路径包含双反斜杠和 @,为什么它们也有效?铁:

var temp = File.ReadAllText(@"C:\\Users\\text.txt").ToString(); // no error

在那种情况下,字符串必须是字面上的“C:\\Users\\text.txt” - 因为前面的“@” - 这不是有效的 Windows 路径(编辑:那是错误的,它是有效的路径,只有探险家不会接受它 - 感谢 Muctadir Dinar),那么为什么它有效?

提前致谢

最佳答案

因为内部 FileStream 在初始化期间调用内部 Path.NormalizePath(path, true, maxPathLength) 方法来标准化传递的路径值。

你可以用反射调用这个方法(它有重载,所以获取 MethodInfo 有点棘手):

string path = @"C:\\Users\\text.txt";
Type type = typeof(Path);
var flags = BindingFlags.Static | BindingFlags.NonPublic;
var binder = Type.DefaultBinder;
var types = new Type[] { typeof(string), typeof(bool), typeof(int) };
var modifiers = new ParameterModifier[0];

var normalize = type.GetMethod("NormalizePath", flags, binder, types, modifiers);
var result = normalize.Invoke(null, new object[] { path, true, 256});

输出:

C:\Users\text.txt

关于c# - 为什么路径即使在 "\\"之前包含 @ 也能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18958846/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com