コードがデータを読み取って解析し、それを使って他の処理を行うディレクトリ内の特定のファイルへのパスを含むリストボックスがあります。私が得るエラーはUnable to cast object of type 'System.String' to type 'System.Web.UI.HtmlControls.HtmlInputFile'
、これを克服する方法がわかりません。
ディレクトリが常に同じであるとは限らないため、ディレクトリパスを取得することだけが機能するタイプのhtmlINPUT
コントロールがあります。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();
.
.
.
}
}