文件存在,如果语句检查,如果文件不存在,则不会返回正确的输出,C#
Posted
技术标签:
【中文标题】文件存在,如果语句检查,如果文件不存在,则不会返回正确的输出,C#【英文标题】:File exists, if statement checks, wont return correct output if file doesnt exist, C# 【发布时间】:2016-03-05 22:11:54 【问题描述】:我有一个嵌套的if-else
语句,它正在检查我拥有的包含其他txt
文件的文件夹的内容。此方法要么创建新的txt
文件,要么在文件夹中已存在这些文件时拒绝访问。
我遇到的问题是检查文件夹中是否存在文件。目前无论我做什么,该命令将始终返回“文件名已存在”,即使它不存在。
如果文件不存在,那么程序应该转到else
语句然后创建新文件
protected void create(string command, string param1)
// creates an empty file w/ default permissions
// if file already exists then error message displayed in console
//checks name of the file, checks if its exists, and if clear, creates the file
if (param1 == "accounts.txt" || param1 == "audit.txt" || param1 == "groups.txt" || param1 == "files.txt")
Console.WriteLine("Cannot use this filename");
Console.Read();
return;
else if (File.Exists(@"C:\Files\"))
Console.WriteLine("Filename already exists");
Console.Read();
return;
else
string path = Path.Combine(@"C:\Files\", param1);
using (StreamWriter sw = File.AppendText(path))
Console.Write("create " + param1 + "");
string path2 = "C:\\Files\\audit.txt";
using (StreamWriter sw2 = File.AppendText(path2))
sw2.WriteLine("File " + param1 + " with owner and default permissions created"); //append name of current login from memory
Console.ReadLine();
【问题讨论】:
【参考方案1】:这里的这个块是说如果文件不存在,那么写到控制台'文件已经存在'
else if (!File.Exists(@"C:\Files\"))
Console.WriteLine("File already exists");
Console.Read();
return;
另请注意,您在目录上使用 File.Exists,而不是实际查看特定文件。
参见 Directory.Exists
MSDN - Directory Exists method
【讨论】:
对不起,应该是 "(File.Exists(@"C:\Files\"))。它正在检查一个目录是否存在文本文件。如果文件名已经被占用,它抛出错误。我更新了问题 @l.redir 更接近,但您的代码仍在执行 File.Exists 在目录上。在 else 你正在做 Path.Combine 来构建完整路径。您需要在 File.Exists() 调用中使用文件的完整路径,以检查该文件名是否已被使用。【参考方案2】:您没有在代码中提供文件名。字符串@"C:\Files\")
不是文件名,是目录。
你可以使用类似的东西。
internal static bool FileOrDirectoryExists(string name)
return (Directory.Exists(name) || File.Exists(name));
要调用该方法,您必须传递有效的文件名。
var name = Path.Combine( @"C:\Test","MyFile.txt");
var ifFileExist = FileOrDirectoryExists(name);
【讨论】:
在这种情况下,“param1”是我作为参数传递的文件名。那么我会做类似的事情: var name = Path.Combine(@"C:\Test",param1); var ifFileExist = FileOrDirectoryExists(name); 是的,你可以这样做。 如果有帮助请标记为答案。问候。以上是关于文件存在,如果语句检查,如果文件不存在,则不会返回正确的输出,C#的主要内容,如果未能解决你的问题,请参考以下文章
检查 JSON 数组中是不是存在值,如果不存在则检查下一个数组(Swift / SwiftUI)