@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

FtpサーバからDLしたCSVファイルの読み込みについて

1
投稿者投稿内容
1co
常連さん
会議室デビュー日: 2005/08/10
投稿数: 39
投稿日時: 2008-03-07 15:59
お世話になっております。

【環境】Windows XP/VB.net 2008 Express
現在、
1.FtpサーバからDLしたCSVファイルを読み込む
2.読み込んだファイルの列Aを特定のフォーマットに変換
3.変換したファイルを圧縮し、Ftpサーバへ転送
という処理を行うアプリを作成しています。

上記1.の処理にて、ファイルのDLまでは問題ないのですが、
TextFieldParserを使用しての読み込み時に、Exceptionが発生します。

読み込んでいるcsvファイルの内容は以下のとおりです。
1,1,1,1,1,1,1,1,1,1
2,2,2,2,2,2,2,2,2,2
3,3,3,3,3,3,3,3,3,3
4,4,4,4,4,4,4,4,4,4
5,5,5,5,5,5,5,5,5,5
6,6,6,6,6,6,6,6,6,6
7,7,7,7,7,7,7,7,7,7
8,8,8,8,8,8,8,8,8,8
9,9,9,9,9,9,9,9,9,9
0,0,0,0,0,0,0,0,0,0

抜粋ですが、ダウンロードから読み込み部分のコードは以下のとおりです。

コード:

	Dim l_request As FtpWebRequest = Nothing
	Dim l_response As FtpWebResponse = Nothing
	Dim l_responseStream As Stream = Nothing
	Dim l_parser As TextFieldParser = Nothing
	Dim csvRecords As New System.Collections.ArrayList()

	l_request = CType(WebRequest.Create("ftp://XXX/XXX/test.csv"), FtpWebRequest)
	l_request.Method = WebRequestMethods.Ftp.DownloadFile
	l_request.Credentials = New NetworkCredential("anonymous", "IEUser@")
	l_response = CType(l_request.GetResponse, FtpWebResponse)
	l_responseStream = l_response.GetResponseStream()
	l_parser = New TextFieldParser(l_responseStream, Encoding.GetEncoding("Shift-JIS"),)
	l_parser.TextFieldType = FieldType.Delimited
	l_parser.SetDelimiters(",")

	Do Until l_parser.EndOfData
		' フィールドを読み込む
		Dim fields As String() = l_parser.ReadFields()
		' 保存
		csvRecords.Add(fields)
	Loop



l_parser(TextFieldParser)でデータを読み込み、
csvRecords(ArrayList)に格納するのですが、
データを2行読み込んだあと、EndOfDataの判定でExceptionが発生します。
Exceptionの種類はObjectDisposedExceptionで、メッセージの内容は
『破棄されたオブジェクトにアクセスできません。 オブジェクト名 'System.Net.Sockets.NetworkStream' です。』
です。

EndOfDataの判定時は、l_parserもl_responseStreamもClose処理など行っておりませんが、
必ず2行目を読んだあとで上記Exceptionが発生します。
何が原因なのか、皆目見当がつきません。

コードに問題がありましたら、ご指摘いただけませんでしょうか。
よろしくお願いいたします。
1

スキルアップ/キャリアアップ(JOB@IT)