我有一个循环运行,并在每个文件夹中创建一堆文件。这些文件夹将根据订单范围进行唯一命名,因此可以更改。并且该文件夹必须存在,否则循环将崩溃。
我想创建一个脚本,该脚本将从根目录中删除所有子文件夹和每个子文件夹中的文件。 即
Root = C:\Output\
SubFolder = C:\Output\T1-500\
SubFolder = C:\Output\T501-1010\
SubFolder = C:\Output\T1011-3076\
然后让它根据需要动态创建文件夹。 我尝试过:
public void Main()
{
// Deletes subfolders and files in the main folder
EmptyFolder(Dts.Variables["User::FolderName"]);
// Creates new folder on the fly
if (Directory.Exists(Dts.Variables["User::FolderName"].Value = 0))
Dts.TaskResult = Directory.CreateDirectory(Dts.Variables["User::FolderName"]);
}
private void EmptyFolder(DirectoryInfo directoryInfo)
{
foreach (FileInfo file in directoryInfo.GetFiles())
{
file.Delete();
}
foreach (DirectoryInfo subfolder in directoryInfo.GetDirectories())
{
EmptyFolder(subfolder);
}
}
答案 0 :(得分:4)
该错误表示您传递的数据类型错误。试试这个。
代替此:
EmptyFolder(Dts.Variables["User::FolderName"]);
使用此:
String folderName = (string)Dts.Variables["User::FolderName"].Value;
DirectoryInfo di = new DirectoryInfo(folderName);
EmptyFolder(di);
也许有一种方法可以将所有内容都放在一行上,但是从那开始。
如下面的评论中所述,如果仅使用(string)
属性,则可能不需要Value
强制转换-也请尝试这样做。
您可能还需要在代码的其他部分中使用新的folderName
字符串变量。
正如我在评论中提到的那样,您也可以只运行这样的命令行来删除文件夹和所有子文件夹
RD <yourfolder> /S /Q