我有一个列表框,其中包含代码读取的目录中的特定文件的路径,并解析数据并使用它做一些事情。我得到的错误是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(字符串)的参数”以获取目录中的所有文件。同样,我不知道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();
.
.
.
}
}
答案 0 :(得分:1)
看起来“hif”是字符串的ArrayList,因为您要向其添加文件路径 因为它包含字符串,所以从循环变量中使用的对象也将是字符串 这一行:
foreach (System.Web.UI.HtmlControls.HtmlInputFile HIF in hif)
应该改为
foreach (string HIF in hif)
然后您将拥有文件路径名,然后可以使用该路径打开文件并获取您要使用的实际File对象。
基本上你指定的强制转换不起作用,因为hif中没有那种类型的对象。