0

我正在尝试使用 C# 将文本文件(转换为 ebcdic)上传到 MVS 中的库中。对于上传文件,我使用了以下字符串:filename = @" ftp://xx.xx.xx.xx// 'myFile'"; 没有撇号是不可能的。
现在,我使用 @" ftp://xx.xx.xx.xx// 'libary_name(myFile)'" 上传到库中,但我收到不正确的语法或参数错误。库名称:user_id.xyz.temp_lib 和 myFile:user_id.xyz.someFile。我该如何解决这个问题?

另外,有没有办法在c#中控制文本文件的块大小?MVS 当前将上传的文件声明为 VB,但我希望它为 FB(当然指定长度)。

谢谢

4

3 回答 3

1

两个想法...

您的第一个示例表明对 MVS 文件名的基本误解。

与 Unix、DOS 或 MS Windows 不同,没有文件夹或“路径”之类的东西。整个 MVS 文件在系统目录中由其唯一的数据集名称定义,该名称不能超过 44 个字符。该文件的组织结构可能不同,可能有也可能没有内部目录或索引。它可以是简单的平面文件、PDS、VSAM、GDG 或数据库等。您必须了解正在使用的文件类型才能正确使用它。

在这种情况下,您将其称为“库”,并进一步指出该库有一个成员名称,强烈暗示该文件是作为 PDS 数据集组织的。作为 PDS,有一个内部目录,可以有多个成员,但单个成员名称不能超过 8 个字节。成员名称计入文件名的 44 字节名称空间限制。正如 Erf 所指出的,PDS 成员名称仅限于字母、数字和一些国家字符。成员内的数据是按顺序访问的。

在您的第一个示例中,您指出成员名称是:user_id.xyz.someFile

该名称显然无效,因为它超过了 8 个字节的限制。如果您缩短了名称,您的示例可能会起作用。事实上,在您更正的示例中,您通过创建一个名为“someFile”的 PDS 成员解决了非法成员名称问题,这是完全有效的。

第二个想法......
你说“如果你在这个命令上使用完整的 MVS 数据集路径,你会得到一个错误。”

该声明听起来不正确,表明您可能不允许 FTP 会话自动将用户 ID 附加到您的文件名。虽然允许 FTP 默认您的文件名工作正常,但在大多数情况下,您应该明确限定整个 MVS 文件名。

如果没有撇号,默认情况下 FTP 应该将您的用户 ID 附加到 MVS 文件名。以下名称是等价的...

@"ftp://xx.xx.xx.xx//libary_name(aMember)"
@"ftp://xx.xx.xx.xx//'user_id.libary_name(aMember)'"

使用撇号,FTP 要求您明确命名完全限定的 MVS 文件名。 它不会为您附加用户 ID。

此示例显示了差异:

@"ftp://xx.xx.xx.xx//libary_name(aMember)"        <- user_id.libary_name(aMember)
@"ftp://xx.xx.xx.xx//'xyz.libary_name(aMember)'"  <- xyz.libary_name(aMember)

您提到如果没有撇号,FTP 将无法工作。这让我很惊讶。您是否尝试过使用 C# 转义双引号 (\") 字符来代替?我认为这也可以。

于 2010-10-12T01:13:35.273 回答
0

解决它!

而不是@" ftp://xx.xx.xx.xx// 'libary_name(myFile)'" 其中库名称:user_id.xyz.temp_lib 和myFile:user_id.xyz.someFile,你必须使用@" ftp: //xx.xx.xx.xx// 'libary_name(someFile)'" 如果在此命令上使用完整的 MVS 数据集路径,则会出现错误。

于 2010-08-30T17:46:17.777 回答
0

对于 MVS ftp 服务器,您不使用 MVS 样式数据集名称。数据集名称中的每个节点都被视为一个目录。例如,如果您从“/”开始,您可以:

chdir user_id chdir xyz chdir temp_lib ls

将为您提供库 user_id.xyz.temp_lib 中所有成员的列表。

要上传,请尝试 @"ftp:/xx.xx.xx.xx/user_id/xyz/temp_lib/myFile"。

要在 FB 中获取文件,可以使用 DCbdsn 命令:

214-DCbdsn=data_set 指定 FTP 应该分配任何新的数据集 214- 具有与该数据集相同的属性。Data_set 是 214- 引号中的完全限定数据集名称 214- 或附加到当前目录名称前缀。214-块大小、lrecl、recfm 和 retpd 参数将覆盖 214-如果指定了模型数据集特性。

您也可以单独使用 Blocksize、lrecl 或 recfm 选项。

于 2011-01-07T16:38:18.287 回答