我尝试使用构建器和存根构建应用程序但是我失败了
我的构建器代码:
File.Copy(AppDomain.CurrentDomain.BaseDirectory + @"\Camstub.exe", filepath);
string split = "|";
string info = split + CName.Text + split + Link.Text + split;
FileStream fs = new FileStream(filepath, FileMode.Open, FileAccess.ReadWrite, FileShare.None);
BinaryWriter bw = new BinaryWriter(fs);
fs.Position = fs.Length + 1;
bw.Write(info);
bw.Close();
MessageBox.Show(info);
我的存根代码:
public MainWindow()
{
InitializeComponent();
StreamReader sr = new StreamReader(System.Windows.Forms.Application.ExecutablePath);
BinaryReader br = new BinaryReader(sr.BaseStream);
byte[] fileData = br.ReadBytes(Convert.ToInt32(sr.BaseStream.Length));
br.Close();
sr.Close();
ASCIIEncoding Enc = new ASCIIEncoding();
string split = "|";
string Message = Enc.GetString(fileData);
MessageBox.Show(Message);
构建器中的消息框显示:
应用程序是成功构建的,但是当我执行它时,消息框显示:
所以,我希望两者都有相同的消息框。
有什么想法吗?
提前致谢;)
答案 0 :(得分:0)
根据评论中提供的信息,您希望从文件末尾读取 | CName | Link | 数据。 | CName | Link | 数据可以是可变长度的。
要处理可变长度数据,您需要以某种方式指示数据的字节长度。在给定的场景中,一个简单而合适的解决方案是在 | CName | Link | 数据之后将字节长度存储为文件末尾的2字节或4字节数字。 2字节数字(即 ushort 或 UInt16 )允许指定最长为65536的长度,并且可能足以满足您的需要。 (如果数据可以超过64KB,则使用4个字节来存储长度。)
因此,构建者应该执行以下操作:
存根应该做这样的事情: