2010-07-10 82 views
1

如何使用WriteByte?下面的代码将不起作用,在“stream.WriteByte(totalSeasons)”出现CS1502错误和CS1502错误;“线。这令人沮丧,因为我非常接近完成这个计划。WriteByte,如何使用它

本质上,我的问题是,我需要在点击一个按钮时将二进制数据写入文件。我可以写这个例如:stream.WriteByte(0xCD);问题是我需要允许用户输入他们想要写入文本框的数据,然后点击按钮数据将从十进制转换为十六进制,然后放入。我想我我已经计算出转换部分了,但是我不能用数据编辑二进制文件,因为看来WriteByte只能写入0xCD这样的十六进制值,并且似乎无法存储十六进制值并仍然写入它。我试过stream.WriteByte(ByteName);但是伴随着上述错误。

void BtnTotalSeasonsClick(object sender, EventArgs e) 
{ 
    using (var stream = new FileStream(drvFile, FileMode.Open, FileAccess.ReadWrite)) 
    { 
     System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding(); 
     Byte[] totalSeasons = enc.GetBytes(txtTotalSeasons.Text); 
     stream.Position = 4; 
     stream.WriteByte(totalSeasons); 
    } 
} 

回答

3

totalSeasons不止一个字节,所以你可以调用Write方法写一整个字节块。

txtTotalSeasons.Text应该变成一个单字节?也许你正在寻找Byte.TryParse而不是Encoding.GetBytes

编辑:提供整个错误消息,不只是数字。另外,文本框中究竟是什么。你似乎对十六进制与十进制比二进制与ASCII比较困惑。它们是数字的不同字符串表示。

0xCD不是十六进制值。它是一个数字的符合C#的十六进制表示。 (C#不允许的另一个十六进制表示是CDh)。编译器将其转换为.NET内部格式的数字(这恰好是二进制的,但这不重要)。然后WriteByteWrite调用将二进制数字存储到文件中。由于编译器将它们全部转换为相同的内部表示,因此您会从stream.WriteByte(0xCD),stream.WriteByte(206)stream.WriteByte(0316)获得相同的结果。如果你想写一个变量,那么根本没有理由使用十六进制,你需要内部表示WriteByte预期。

你说用户输入0到255之间的数字,用十进制表示?然后,所需的转换是从十进制字符串表示形式到内部表示形式,这称为“解析”。

试试这个代码:

stream.WriteByte(Byte.Parse(txtTotalSeasons.Text)); 
+0

谢谢,但我有另一个问题。现在错误CS1501出现。如何在这种情况下编写Write? – 2010-07-10 22:44:03

+0

没关系。修复了我自己的问题。 – 2010-07-11 17:45:01

1

你试过:

foreach (var b in totalSeasons) 
{ 
    stream.WriteByte(b); 
} 

WriteByte在一次写一个字节,而不是字节数组。

+2

为什么要最大限度地增加I/O调用的数量? – 2010-07-10 22:34:59

+0

好点的本,在英国这里迟到了:) – 2010-07-10 22:38:28

+0

// @本:最大化?请...不难想象如何一次写入1位... – codekaizen 2010-07-10 22:54:34