如何验证文件夹是不是已存在

Posted

技术标签:

【中文标题】如何验证文件夹是不是已存在【英文标题】:How to validate if a folder already exists如何验证文件夹是否已存在 【发布时间】:2019-01-01 13:02:52 【问题描述】:

我想创建文件夹并在文件夹中添加类。我可以创建一次文件夹,但是一旦创建了它,我只想添加类。我的代码给出了错误,因为我试图多次创建一个文件夹,这是不对的。所以在向文件夹添加类之前,我想检查文件夹是否已经存在,如果存在我只想添加类。

 ProjectItem rootFolder = project.ProjectItems.AddFolder(folder);                    
 ProjectItem item = rootFolder.ProjectItems.AddFromTemplate(itemPath, className);

【问题讨论】:

文件夹也是ProjectItem,the documentation say 是什么?据我所知,没有Exists 方法,但您可以枚举(实际上:遍历)项目并测试每个项目是否与您的文件夹相等。 相关:social.msdn.microsoft.com/Forums/vstudio/en-US/… 是的,folder 是一个字符串。我有一个for each,为每个班级创建一个文件夹。但是如果我有两个属于同一个文件夹的类会给我错误,因为我没有做这个验证。这就是我要找的。​​span> 基于现有答案下方的评论讨论,为澄清起见,ProjectItems.AddFolder 创建了一个解决方案文件夹。这是您想要的还是您在谈论磁盘上的正常“物理”目录结构? 创建解决方案文件夹 【参考方案1】:

根据documentation,没有一种Exists 函数可以告诉我们文件夹是否已经存在。

所以你至少有两个选择:

1.尝试忽略

简单地说:

try 

    var rootFolder = project.ProjectItems.AddFolder(folder);

catch 

    /* folder already exists, nothing to do */

2。解决方案文件夹只能出现在解决方案根节点下方的第一级,因此我们可以使用非递归解决方案。

public static bool CheckIfSolutionFolderExists(ProjectItems projectItems, string foldername)

    foreach(var projectItem in projectItems)
    
        if(projectItem.Kind == EnvDTE.vsProjectItemKindVirtualFolder)
        
            if(projectItem.Name == foldername)
            
                return true;
            
        
    
    return false;

对于递归解决方案,我找到了this,归结为:

public static bool CheckIfFileExistsInProject(ProjectItems projectItems, string fullpath)

    foreach(ProjectItem projectItem in projectItems)
    
        if(projectItem.Name == fullpath)
        
            return true; 
        
        else if ((projectItem.ProjectItems != null) && (projectItem.ProjectItems.Count > 0))
        
            /* recursive search */
            return CheckIfFileExistsInProject(projectItem.ProjectItems, fullpath);
        
     
    return false;

当您想在项目树中镜像文件系统层次结构时,解决方案和项目文件夹管理的稳健模式将使用 AddFromDirectory,而 AddFolder 仅用于在文件系统中没有表示的虚拟文件夹。

ProjectItem item;
if(Directory.Exists(itemname))

    item = project.AddFromDirectory(itemname);

else

    item = project.AddFolder(itemname);

(来源:灵感来自this)

【讨论】:

【参考方案2】:

您需要执行以下操作:

if(Directory.Exists(path)) 

    // The folder already exists

else 

    //Create a new folder here ...
 

更多详情请查看Directory.Exists

【讨论】:

这与问题有什么关系? OP 希望阻止将文件夹添加到先前已添加的解决方案树中。 此代码示例主要用于检查文件夹是否存在,这不是OP面临的问题吗?如果文件夹已经存在,则继续向其中添加项目,否则创建一个新的。 我认为不是,因为ProjectItem.AddFolder 不像ProjectItem.AddFromDirectory 不采用物理路径 - 它只是解决方案资源管理器中文件夹节点的名称。这种文件夹作为Project 条目存在于sln 文件中,但不对应于磁盘上的目录。【参考方案3】:

您可以使用方法Directory.Exists

在你的代码中它看起来像那里

if(!Directory.Exists(folder))  
  ProjectItem rootFolder = project.ProjectItems.AddFolder(folder);

ProjectItem item = rootFolder.ProjectItems.AddFromTemplate(itemPath, className);

【讨论】:

以上是关于如何验证文件夹是不是已存在的主要内容,如果未能解决你的问题,请参考以下文章

如何验证批处理文件中是不是存在文件?

如何验证输入电子邮件是不是已存在于数据库中?

如何检查文件中是不是已存在用户名并将其积分添加给他?

验证文件是不是为 SQL 或验证其语法

如何判断用户名是不是在数据库中已经存在呢JSP

CodeIgniter - 检查数据库中是不是已存在值