文件存在,如果语句检查,如果文件不存在,则不会返回正确的输出,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#的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用try语句的情况下查看文件是否存在

检查文件夹,如果不存在则创建它

检查 JSON 数组中是不是存在值,如果不存在则检查下一个数组(Swift / SwiftUI)

Shell 脚本检查 dir 目录是不是存在然后更改路径,如果不存在则使用该名称创建 dir 并检查文件名不存在

Ansible - 版本文件检查

检查模板中是不是存在变量,如果不存在则不会在记录器中导致错误