为什么Path.GetFileName(string)返回完整路径?

时间:2015-07-20 14:52:27

标签: c#

我已经创建了一个PCL(可移植类库)来为我的应用程序做一些日志记录,并且有方法:

public static void EnterPage([CallerFilePath]string memberName = "")
{
   var file = System.IO.Path.GetFileName(memberName);
   Track(file);
}

memberName = "d:\\teamFoundation\\MyApp\\MyApp-Reporting\\MyApp.Core\\App.cs"

GetFileName返回完整路径 - d:\\teamFoundation\\MyApp\\MyApp-Reporting\\MyApp.Core\\App.cs而不是App.cs

有什么理由说这不适用于PCL吗?我目前正在Android设备上运行

2 个答案:

答案 0 :(得分:4)

在Windows上,Path分隔符为\,但Android

的情况不同

android documentation,您可以看到分隔符实际为/,这与iOS

相同

memberName的值在编译时传递,因此取决于您构建解决方案的计算机的类型。调用System.IO.Path.GetFileName的地方在运行时完成。

因此,要解决此问题,您必须替换文件路径中的分隔符:

public static void EnterPage([CallerFilePath]string memberName = "")
{
    char seperatorChar = (char)typeof(System.IO.Path).GetTypeInfo().GetDeclaredField("DirectorySeparatorChar").GetValue(null);
    var file = System.IO.Path.GetFileNameWithoutExtension(memberName.Replace('\\', seperatorChar));
    Track(file);
}

答案 1 :(得分:1)

如果跨平台工作,您将需要手动执行此操作。 memberName的值在编译时传递,其中System.IO.Path.GetFileName的调用在运行时完成。 Windows和Android之间的路径分隔符是不同的。