如何验证文件夹是不是已存在
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);
【讨论】:
以上是关于如何验证文件夹是不是已存在的主要内容,如果未能解决你的问题,请参考以下文章