gpt4 book ai didi

c# - 使用绝对路径访问文件时出现问题

转载 作者:行者123 更新时间:2023-12-02 08:30:05 25 4
gpt4 key购买 nike

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

我在 Windows 10 桌面上运行此代码,并且该应用程序是使用 .NetCore 2.1 创建的。我尝试了各种不同的方法来评估文件的存在性,例如 FileInfo 类实例和 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

即使传递的是绝对路径,它也会将当前工作目录作为我传递的路径的前缀。我已经检查了文件的访问权限,一切都很好,但我仍然得到 false 作为这两种情况的响应。

Screenshot of Error

Screenshot of Debug Info

最佳答案

判断您的屏幕截图和输出,文件路径的开头有一个不可见的字符。这将导致 .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

如果您将代码放入十六进制编辑器中,您将看到 D: 之前确实有一个字符。

关于c# - 使用绝对路径访问文件时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54239372/

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