0

コードがデータを読み取って解析し、それを使って他の処理を行うディレクトリ内の特定のファイルへのパスを含むリストボックスがあります。私が得るエラーは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();
            .
            .
            .
         }
    }
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 に答える