C# 如何找出目录中是否存在文件

How to find out a file exists in the direcctory c#

file path file properties 我试图将我的文件路径传递给我的方法,然后我可以获得它的文本。我在同一个项目中对其他 10 种方法使用相同的代码结构,并且它工作正常。但是,我将正确的路径发送到我的方法并且目录存在于该位置,它找不到文件并打开它并出现错误消息。我检查了所有可能的语法错误,但找不到任何错误,而且它只发生在项目的一个 class 中。谁能告诉我如何解决这个错误?也许这是一个我不知道的 visual studio 错误。

以下是无法找到现有文件的两种方法之一的示例:

public string ReadCourseInfoByID(string id)
    {
        string filepath = @"database\Courses\" + id + "\Info.txt" ;
        //MessageBox.Show(filepath);
        string dataline=" ";
        if (!Directory.Exists(filepath))
        {
            MessageBox.Show("File not found!", "Error");
            return dataline;
        }
        else
        {
           
            StreamReader InputFile;
            InputFile = File.OpenText(filepath);
            while (!InputFile.EndOfStream)
            {
                 dataline= InputFile.ReadLine();
            }
            InputFile.Close();
            return dataline;
        }

    }

正如 Cid 评论的那样,您使用的是 verbatim string,由字符串的 @ 前缀表示。逐字字符串的转义字符不是 \,而是 ",这意味着您无需转义反斜杠即可将它们放入字符串中。这会将您当前的路径变成这个

string filepath = @"database\Courses\" + id + @"\Info.txt"

或者更简单地说,使用 string interpolation 这个

string filepath = $@"database\Courses\{id}\Info.txt"


请注意,不建议像这样手动进行文件路径连接。而是使用 Path.Combine 方法为您完成。这再次将您的代码变成了这个

string filepath = Path.Combine("database", "Courses", id, "Info.txt");

Here 是一个演示整个行为的 dotnetfiddle。请注意路径与 windows 系统上的路径不同,但这是由于 dotnetfiddle 的工作方式


另请注意,所有这些文件路径都是 relative paths,这意味着它指向的实际位置因您执行应用程序的位置而异。如果您在 C:\Program Files\ 中启动它,路径将指向 C:\Program Files\database\Courses\{id}\Info.txt,但如果您在其他位置启动它,例如 C:\Temp\,路径实际上将指向 C:\Temp\database\Courses\{id}\Info.txt

您应该使用 File.Exists 而不是 Directory.Exists 来检查文件是否存在。

if (!File.Exists(filepath))
{
    MessageBox.Show("File not found!", "Error");
    return dataline;
}
else...