我想创建文件夹并在文件夹中添加类。我可以创建一次文件夹,但是一旦创建了文件夹,我只想添加类。我的代码给出了错误,因为我试图多次创建一个文件夹,这是不对的。因此,在将类添加到文件夹之前,我想检查文件夹是否已经存在,以及是否存在,我只想添加类。
ProjectItem rootFolder = project.ProjectItems.AddFolder(folder);
ProjectItem item = rootFolder.ProjectItems.AddFromTemplate(itemPath, className);
答案 0 :(得分:0)
您可以使用方法Directory.Exists
在您的代码中看起来就像
if(!Directory.Exists(folder)) {
ProjectItem rootFolder = project.ProjectItems.AddFolder(folder);
}
ProjectItem item = rootFolder.ProjectItems.AddFromTemplate(itemPath, className);
答案 1 :(得分:0)
您需要执行以下操作:
if(Directory.Exists(path))
{
// The folder already exists
}
else
{
//Create a new folder here ...
}
请查看有关Directory.Exists
的更多详细信息答案 2 :(得分:0)
根据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)