C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: FolderBrowserDialogについて


(過去ログ 120 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■72104 / inTopicNo.1)  FolderBrowserDialogについて
  
□投稿者/ ゴン (1回)-(2014/05/16(Fri) 23:05:12)

分類:[VB.NET/VB2005 以降] 

環境:VisualStudio2012、.Net4.5、Windows7

次のような現象が起きて、どう対処したらいいかわからない状況です。

FolderBrowserDialogを使用してフォルダを選択後、配下のファイル一覧を取得し
それらのファイルを参照しようとしています。

If FolderBrowserDialog1.ShowDialog = Windows.Forms.Dialog.OK Then
    Dim path As String = FolderBrowserDialog1.SelectedPath
    Dim files As IEnumerable(Of String) = Directory.EnumerateFiles(path, "*.xml", SearchOption.AllDirectories)
    For Each file In files
        Dim xDoc As New XMLDocument
        xDoc.Load(file)
    Next
End If

この時filesには正常にパスが取得できていて、次のLoadでもExceptionは発生しません。
ところが、xDocをウォッチで見ると"式を評価できません"と表示され、以降のDOM操作も機能しませんでした。
何故こうなるのかさっぱりだったので、以下のようにあがいてみました。

1.上記のIf文の後に全く関係ないコードを書いてみた
    具体的にはDataTableに適当に値を詰めるコード
    →DataTableの変数が同じく"式を評価できません"となって参照できない
2.FrameWorkのバージョンを変えてみた
    →4.0、4.5はNG、3.5まで落としたら正常に動作した(EnumerateFilesは別のメソッドに変えた)
3.別の端末で同じコードを試してみた
    →Win8、VS2012、.NET4.5  ×
    →Vista、VS2005、.NET2.0  ○
    
現象の羅列で申し訳ありませんが助言のほうよろしくお願いします。
    

引用返信 編集キー/
■72105 / inTopicNo.2)  Re[1]: FolderBrowserDialogについて
□投稿者/ Azulean (311回)-(2014/05/17(Sat) 00:02:53)
2014/05/17(Sat) 00:04:31 編集(投稿者)

念のための確認ということで書いています。
もし、「そんなレベルの問題じゃない!」という確認内容となってしまった場合は申し訳ありません。
その場合は、もう少し確認状況などを書き添えていただければ、後続の回答者の理解の助けになりますので、ご協力をお願いします。

No72104 (ゴン さん) に返信
> この時filesには正常にパスが取得できていて、次のLoadでもExceptionは発生しません。
> ところが、xDocをウォッチで見ると"式を評価できません"と表示され、以降のDOM操作も機能しませんでした。
> 何故こうなるのかさっぱりだったので、以下のようにあがいてみました。

ここに掲載されているコードで確認されているのでしょうか?
だとすると、Load の次は Next、つまり xDoc のスコープ(変数の生存範囲)はもう終わろうとしているわけですし、バージョン依存で表示できる・表示できないはあり得るかもしれません。

DataTable の確認事例も紹介されていますが、それはどの行で停止(ブレーク)させている状態で確認されたのでしょうか?
その変数に到達する前であれば「式を参照できません」と言われますが、それとは違うと考えてよいのでしょうか?
引用返信 編集キー/
■72109 / inTopicNo.3)  Re[2]: FolderBrowserDialogについて
□投稿者/ ゴン (2回)-(2014/05/17(Sat) 09:40:48)
No72105 (Azulean さん) に返信
> 2014/05/17(Sat) 00:04:31 編集(投稿者)

すみません。いつも説明足らずと言われます。
改めて状況を説明しますと

If FolderBrowserDialog1.ShowDialog = Windows.Forms.Dialog.OK Then
    Dim path As String = FolderBrowserDialog1.SelectedPath
    Dim files As IEnumerable(Of String) = Directory.EnumerateFiles(path, "*.xml", SearchOption.AllDirectories)
    For Each file In files
        Dim xDoc As New XMLDocument
        xDoc.Load(file)
        ' **後続のDOM処理)**
        Dim nodes As XmlNodeList = xDoc.GetElementsByTagName("Item")  ' ブレーク
    Next
End If

' **ケース1のお試しコード**
Dim dt As New DataTable
dt.Columns.Add("Test")  ' ブレーク

上記の位置でブレークするとxDocとdtがそれぞれ"式を評価できません"となります。
ひとまずスコープ間違いという凡ミスではないと思っています。

ケース2はコードはそのままに対象のFrameWorkのバージョンを変えました。
ケース3もコードはそのままに別の端末の環境(前述の環境から変更しない)で実行しました。

さらにケース4として、FolderBrowserDialogを使用しないパターンも試してみました。

Dim xDoc As New XMLDocument
xDoc.Load("D:\test.xml")
Dim nodes As XmlNodeList = xDoc.GetElementsByTagName("Item")

上記のIfの括りを全てコメント化し、ファイルを直接指定します。(位置はDataTableの直後)
結果、正常に動作し単独のコードとしては問題ないように思います。(DataTableも同様に正常)

引き続きよろしくお願いします。

引用返信 編集キー/
■72110 / inTopicNo.4)  Re[3]: FolderBrowserDialogについて
□投稿者/ とっちゃん (220回)-(2014/05/17(Sat) 10:10:05)
とっちゃん さんの Web サイト
No72109 (ゴン さん) に返信

Release版で動かしていて、見れないということはありませんか?

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -