日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

使用Marshal.Copy把Txt行数据转为Struct类型值

發布時間:2023/12/20 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Marshal.Copy把Txt行数据转为Struct类型值 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

添加重要的命名空間:

using System.Runtime.InteropServices;

先建立結構相同(char長度相同)的Struct類型用于轉換:

[StructLayout(LayoutKind.Sequential, Pack = 1)]public struct Employee{[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]public char[] EmployeeId;[MarshalAs(UnmanagedType.ByValArray, SizeConst = 30)]public char[] LastName;[MarshalAs(UnmanagedType.ByValArray, SizeConst = 30)]public char[] FirstName;//這里省略很多列}

數據文本類似下面, 如這三列固定長度(6,30,30):

10001 Nick Yang 10002 Nick2 Yang 10003 Nick3 Yang

代碼獲取并轉換:

/// <summary>/// Get data from interface file/// </summary>public void GetDataFromFile(){try{string path = ConfigurationManager.ConnectionStrings["DataPath"].ConnectionString;if (File.Exists(path)){string[] rows = File.ReadAllLines(path, Encoding.UTF8);foreach (string row in rows){byte[] bytes = Encoding.UTF8.GetBytes(row);//以下為重點代碼int size = Marshal.SizeOf(typeof(Employee));IntPtr buffer = Marshal.AllocHGlobal(size);try{Marshal.Copy(bytes, 0, buffer, size);//此處已經完成轉換Employee emp = (Employee)Marshal.PtrToStructure(buffer, typeof(Employee));//省略很多代碼 }catch (Exception ex){throw new Exception("Error when Copying bytes from interface to Employee", ex);}finally{Marshal.FreeHGlobal(buffer);}}}else{throw new Exception(string.Format("Error. Can`t not find the interface file at '{0}'", path));}}catch (Exception ex){throw new Exception("Error when getting data from interface file.", ex);}}

?

轉載于:https://www.cnblogs.com/xachary/p/3745063.html

總結

以上是生活随笔為你收集整理的使用Marshal.Copy把Txt行数据转为Struct类型值的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。