首页 > 解决方案 > C#检查文件夹中是否存在文件

问题描述

我有一个 For Each Loop 容器,用于处理每晚到达的文件。我定义了三个用户变量:Fo​​lderPath(“I:\Data Analytics\Referral”)、FileName(空白)——只读变量、FileExistsFlg——ReadWriteVariables。前两个是字符串,最后一个是 int。我添加了“使用 System.IO;” 到我的命名空间。 FileExistsFlg 的值为 0——我添加变量时的默认值。

这是我的 C# 代码:

public void Main()
{
    // TODO: Add your code here

   String FilePath = Dts.Variables["User::FolderPath"].Value.ToString() 
                   + Dts.Variables["User::FileName"].Value.ToString();

    if ( File.Exists(FilePath))
    {
        Dts.Variables["User::FileExistsFlg"].Value = 1;
    }

    MessageBox.Show(FilePath); 
    MessageBox.Show(Dts.Variables["User::FileExistsFlg"].Value.ToString());

    Dts.TaskResult = (int)ScriptResults.Success; 
}

任务执行,但实际上有文件时它总是返回值 0。我正在使用 MessageBox.Show(. . . .) 来测试脚本。

如果我在变量中提供特定的文件名,代码可以正常工作,但文件名每天都会改变。如果我将变量留空,则它返回 0。

这并不像火箭科学那样让我震惊,我很困惑为什么它总是返回一个错误的值。

谢谢。

标签: c#foreachssis

解决方案


我假设您想从文件夹中获取所有文件。您可以使用System.IO.Directory.GetFiles来执行此操作:

  string mypath = "C:/myfolder/";
  string[] files = Directory.GetFiles(mypath);

然后,您可以像这样运行所有文件:

   foreach(string item in files){

     if(item.Contains("my file name without the extension")){
        //Do Something
     }

   }

------------编辑#1

string mypath = "C:/myfolder/";
string[] files = Directory.GetFiles(mypath);
if(!files.Length == 0){

 foreach(string item in files){

   //Run rest of code using the item

 }

}else{}

foreach 语句的字符串变量包含文件的文件路径。

----------- EDIT #2
如果第一个 if 语句出现错误,说“!” 运算符不能应用于整数,而是将 foreach 代码放入 else 语句中。

string mypath = "C:/myfolder/";
string[] files = Directory.GetFiles(mypath);
if(files.Length == 0){

 //do nothing. No files are in the folder.

}else{

foreach(string item in files){

   //Do something. Files are in the folder.

 }
}


根据我对问题的理解,在 foreach 语句中将是处理和存档文件的代码。名为“item”的字符串应该包含文件的路径。


推荐阅读