使用绝对路径进行文件访问时出现问题

拉姆·库玛兰|

我创建了一个.NetCore控制台应用程序,其中正在尝试使用其绝对路径检查文件是否存在,但是遇到问题,即使文件存在,我也总是得到错误的响应。即使我将绝对路径作为参数传递给API,它也始终在当前工作目录前添加前缀,因此该路径将被评估为不存在。

我正在Windows 10桌面上运行此代码,并且该应用程序是使用.NetCore 2.1创建的。我尝试了各种不同的方法来评估文件的存在,例如FileInfo Class实例和File.Exists静态方法。到目前为止,他们已经失败了。我已经诊断出问题,但找不到解决方法。

using System;
using System.IO;

namespace FileAccess
{
    class Program
    {
        static void Main(string[] args)
        {
            FileInfo fileInfo = new FileInfo(@"‪D:\ScriptData\test.zip");
            Console.WriteLine($"Full Name: {fileInfo.FullName}");
            Console.WriteLine($"FileInfo.Exists: {fileInfo.Exists}");
            Console.Write($"File.Exists with @: {File.Exists(@"‪D:\ScriptData\test.zip")}")
            Console.ReadLine();
        }
    }
}

代码的输出为:

Full Name: D:\Work\Samples\FileAccess\FileAccess\bin\Debug\netcoreapp2.1\?D:\ScriptData\test.zip
False
False

即使传递了绝对路径,它也会在当前工作目录的前面加上我传递的路径。我已经检查了对文件的访问,一切都很好,但在两种情况下,我仍然都得到了错误的答复。

屏幕截图错误

调试信息的屏幕截图

帕特里克·霍夫曼

判断屏幕快照和输出,在文件路径的开头有一个不可见的字符。这将导致.NET无法识别它是绝对路径,并自动使其成为绝对路径。

如果使用此代码,您会注意到插入的代码?会在此处引起问题:

System.IO.FileInfo fi = new System.IO.FileInfo(@"?D:\some_file.ext");

其输出:C:\Users\...\ConsoleApp8\bin\Debug\netcoreapp2.2\?D:\some_file.ext

代替:

System.IO.FileInfo fi = new System.IO.FileInfo(@"D:\some_file.ext");

其输出:D:\some_file.ext

如果将代码放在HEX编辑器中,您将看到确实存在一个字符D:

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章