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

How to validate if a folder already exists

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

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

你可以使用方法Directory.Exists

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

if(!Directory.Exists(folder)) { 
  ProjectItem rootFolder = project.ProjectItems.AddFolder(folder);
}
ProjectItem item = rootFolder.ProjectItems.AddFromTemplate(itemPath, className);

您需要执行以下操作:

if(Directory.Exists(path)) 
{
    // The folder already exists
}
else 
{
    //Create a new folder here ...
} 

有关 Directory.Exists

的更多详细信息,请查看此内容

根据 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