我可以“映射”或定义文件上的记录吗?

时间:2018-09-14 00:36:03

标签: c# .net buffer

在DEC / HP VMS Vax Basic的较早时期,有一种方法来定义记录的字段并将该定义“映射”到打开的文件。读取记录时,将为该记录填充映射中定义的字段,而无需对解析和设置进行编码。过去看起来像这样:

MAP (Bec) STRING Owner = 30%, LONG Vehicle_number,    &
          STRING Serial_number = 22%
OPEN "VEH.IDN" FOR INPUT AS FILE #2%,                 &
      ORGANIZATION SEQUENTIAL FIXED,                  &
      MAP Bec, ACCESS READ
INPUT "Which record do you want";A%
WHILE (A% <> 0%)
   GET #2%, RECORD A%
   PRINT "The vehicle number is", Vehicle_number
   PRINT "The serial number is", Serial_number
   PRINT "The owner of vehicle";Vehicle_number; "is", Owner
   INPUT "Next Record";A%
NEXT
CLOSE #2%
END

我找不到.Net环境中是否有任何类似的东西,特别是C#。

1 个答案:

答案 0 :(得分:0)

.Net Framework中有一个MemoryMappedFile类,请参见

https://docs.microsoft.com/en-us/dotnet/api/system.io.memorymappedfiles.memorymappedfile

您可以使用它来创建一个内存映射文件,并且有一些方法可以将结构读写到内存区域。

请参阅链接中的示例:

    long offset = 0x10000000; // 256 megabytes
    long length = 0x20000000; // 512 megabytes

    // Create the memory-mapped file.
    using (var mmf = MemoryMappedFile.CreateFromFile(@"c:\ExtremelyLargeImage.data", FileMode.Open,"ImgA"))
    {
        // Create a random access view, from the 256th megabyte (the offset)
        // to the 768th megabyte (the offset plus length).
        using (var accessor = mmf.CreateViewAccessor(offset, length))
        {
            int colorSize = Marshal.SizeOf(typeof(MyColor));
            MyColor color;

            // Make changes to the view.
            for (long i = 0; i < length; i += colorSize)
            {
                accessor.Read(i, out color);
                color.Brighten(10);
                accessor.Write(i, ref color);
            }
        }
    }