将问题'System.String'强制转换为'System.Web.UI.HtmlControls.HtmlInputFile'

时间:2013-04-19 21:40:41

标签: c# asp.net

我有一个列表框,其中包含代码读取的目录中的特定文件的路径,并解析数据并使用它做一些事情。我得到的错误是Unable to cast object of type 'System.String' to type 'System.Web.UI.HtmlControls.HtmlInputFile',我不知道如何克服这个问题。

我有一个类型为INPUT的html file控件,其唯一的功能是获取目录路径,因为该目录并不总是相同。然后,我将PostedFile.FilenameC:\temp\2013\03-2013\Calib 100 for 29 Mar 13\211jd13100.txt看起来像'\'分割成一个字符串数组。我通过添加数组元素减去最后一个索引来重新组合字符串中的路径,并将其用作“Directory.GetFiles(字符串)的参数”以获取目录中的所有文件。同样,我不知道anohter获取目录信息的方法。无论如何,我只是发布代码,它将更容易理解。

static public ArrayList hif = new ArrayList();
static string[] filePaths;

 protected void btnAddFile_Click(object sender, System.EventArgs e)
 {                
    if (Page.IsPostBack == true)
    {            
        StringBuilder sb = new StringBuilder();

        string[] dirLocation = fileUpload.PostedFile.FileName.Split('\\');            
        for (int i = 0; i < dirLocation.Length - 1; i++)
        {
            sb.Append(dirLocation[i].ToString() + "\\");
        }

        // The assenbled directory path is being used to get the files.
        filePaths = Directory.GetFiles(sb.ToString());

        for (int i = 0; i < filePaths.Length; i++)
        {
            hif.Add(filePaths[i]);
            lbxSelectedFiles.Items.Add(filePaths[i]);
        }
    }
}

上面的方法使用文件路径和名称加载列表框和filePath数组。下面的方法负责解析但在此之前我需要获取文件,并且错误发生在parent()之间的foreach语句。

    foreach (System.Web.UI.HtmlControls.HtmlInputFile HIF in hif)
    {
        try
        {
            File = HIF.PostedFile;
            StreamReader data = new StreamReader(HIF.PostedFile.InputStream);
            PathFilename = File.FileName.ToString();

            DirectoryInfo directory = new DirectoryInfo(PathFilename);
            Directory = directory.Parent.ToString();
            .
            .
            .
         }
    }

1 个答案:

答案 0 :(得分:1)

看起来“hif”是字符串的ArrayList,因为您要向其添加文件路径 因为它包含字符串,所以从循环变量中使用的对象也将是字符串 这一行:

 foreach (System.Web.UI.HtmlControls.HtmlInputFile HIF in hif)

应该改为

 foreach (string HIF in hif)

然后您将拥有文件路径名,然后可以使用该路径打开文件并获取您要使用的实际File对象。

基本上你指定的强制转换不起作用,因为hif中没有那种类型的对象。