title: C# Binary reading incomplete strings
body: <p>i was hoping to get some help on this problem, so as you can see in the picture bellow, i can't seem to read the whole word up to 0x00:
  <img src="https://i.stack.imgur.com/zwnIh.png" alt="enter image description here"></p>
  
  <p>what i am trying ot do, is to just read the file strings properly ,here is the code i used to open the file:</p>
  
  <pre><code>        private void menuItem2_Click(object sender, EventArgs e)
      {
          listView1.Items.Clear();
          textBox1.Text = "";
          menuItem12.Text = "file type is: ";
          OpenFileDialog ofd = new OpenFileDialog();
          ofd.Title = "Open File";
          ofd.Filter = "All Files (*.*)|*.*";
          if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
          {
              path = ofd.FileName;
              BinaryReader br = new BinaryReader(File.OpenRead(path), Encoding.GetEncoding("SHIFT-JIS"));
              foreach (char mychar in br.ReadChars(4)) menuItem12.Text += mychar;
              if (menuItem12.Text != "file type is: TXTD")
              {
                  MessageBox.Show("This is not a TXTD file...", "Sorry", MessageBoxButtons.OK, MessageBoxIcon.Error);
                  return;
              }
              else
              {
                      MessageBox.Show("File opened Succesfully!", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information);
                      br.BaseStream.Position = 0x8;
                      int Pntrnum = br.ReadInt16();
                      menuItem11.Visible = true;
                      menuItem11.Text = Pntrnum.ToString();
                      List&lt;int&gt; offsets = new List&lt;int&gt;();
                      br.BaseStream.Position = 0x10;
                      for (int i = 0; i &lt; Pntrnum; i++)
                      {
                          offsets.Add(br.ReadInt32());
                      }
                      Dictionary&lt;int, string&gt; values = new Dictionary&lt;int, string&gt;();
                      for (int i = 0; i &lt; offsets.Count; i++)
                      {
                          int currentOffset = offsets[i];
  
                          int nextOffset = (i + 1) &lt; offsets.Count ? offsets[i + 1] : (int)br.BaseStream.Length;
  
                          int stringLength = (nextOffset - currentOffset - 1) / 2;
  
                          br.BaseStream.Position = currentOffset;
  
                          var chars = br.ReadChars(stringLength);
                          values.Add(currentOffset, new String(chars));
                      }
  
                      foreach (int offset in offsets)
                      {
                          listView1.Items.Add(offset.ToString("X")).SubItems.Add(values[offset]);
                      }
  
                      br.Close();
                      br = null;
              }
          }
          ofd.Dispose();
          ofd = null;
      }
  </code></pre>