我创建了一个.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] 删除。
我来说两句