Я совсем не уверен, что вы можете рассматривать префиксы набора данных как каталоги. Когда я делаю выгрузку на мэйнфрейм с помощью ftp, я всегда просто указываю полное имя цели. Я бы избавился от
ftp.ChangeRemoteDir("ABC.SITEUPLOAD.UPLOAD")
раздел в целом и просто изменить:
remoteFilename = "2009102600000"
до:
remoteFilename = "'ABC.SITEUPLOAD.UPLOAD.2009102600000'"
, если это набор данных, или:
remoteFilename = "'ABC.SITEUPLOAD.UPLOAD(2009102600000)'"
если это член (в этом случае набор данных должен существовать первым).
Также было бы полезно, если бы вы изменили операторы MsgBox
, чтобы они включали указание на , что на самом деле вызывает ошибку. Что-то вроде:
MsgBox("Connect error: " & ftp.LastErrorText)
MsgBox("ChangeRemoteDir error: " & ftp.LastErrorText)
MsgBox("PutFile error: " & ftp.LastErrorText)
вместо общего:
MsgBox(ftp.LastErrorText)
Еще один момент: вы заметите, что я поставил одиночные кавычки вокруг целей выше. Это потому, что z / OS имеет привычку (иногда) ставить префикс вашего имени для входа в систему. Может быть так:
put xyz.txt upload(xyz)
на самом деле пытается поместить его в yourname.upload(xyz)
. Цитирование это предотвратит.
Обновление: Знаете, я только что заметил что-то, что полностью ускользнуло от меня, когда я впервые прочитал этот вопрос. В сообщении об ошибке все ясно.
Сегменты имен наборов данных и имена элементов в разделенных наборах данных ограничены 8 символами. Следовательно, ваш 'ABC.SITEUPLOAD.UPLOAD(2009102600000)'
недействителен на двух счетах, SITEUPLOAD
и 2009102600000
. Попробуйте сократить имена и перенести заново.
Вот доказательство:
C:\Documents and Settings\Pax> ftp bigiron
Connected to bigiron.box.com.
220-FTPD1 IBM FTP CS V1R9 at BIGIRON.BOX.COM, 02:15:23 on 2009-11-06.
220 Connection will close if idle for more than 5 minutes.
User (bigiron.box.com:(none)): pax
331 Send password please.
Password:
230 PAX is logged on. Working directory is "PAX.".
ftp> put test.txt 'pax.siteupload'
200 Port request OK.
501 Invalid data set name "'pax.siteupload'". Use MVS Dsname conventions.
ftp> put test.txt 'pax.siteupld'
200 Port request OK.
125 Storing data set PAX.SITEUPLD
250 Transfer completed successfully.
ftp: 177 bytes sent in 0.00Seconds 177000.00Kbytes/sec.
ftp> put test.txt 'pax.jcl(abcdefghi)'
200 Port request OK.
501 Invalid data set name "'pax.jcl(abcdefghi)'". Use MVS Dsname conventions.
ftp> put test.txt 'pax.jcl(abcdefgh)'
200 Port request OK.
125 Storing data set PAX.JCL(ABCDEFGH)
250 Transfer completed successfully.
ftp: 177 bytes sent in 0.00Seconds 177000.00Kbytes/sec.
ftp> bye
221 Quit command received. Goodbye.