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...
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...