0

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

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

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上面的方法使用文件路径和名称加载列表框和数组。下面的方法负责解析,但在此之前我需要获取文件并且错误发生在父母之间的 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();
            .
            .
            .
         }
    }
4

1 回答 1

1

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

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

应该改为

 foreach (string HIF in hif)

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

基本上,您指定的演员表不起作用,因为 hif 中没有那种类型的对象。

于 2013-04-19T21:49:10.133 回答