Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# BinaryWriter.Write(Int32)_C#_File_Int32_Binarywriter - Fatal编程技术网

C# BinaryWriter.Write(Int32)

C# BinaryWriter.Write(Int32),c#,file,int32,binarywriter,C#,File,Int32,Binarywriter,我有一个包含如下结构的文件: public struct index { public string word; //30 bytes public int pos; //4 bytes }; 对于单词,我确保在写入之前将其扩展到30个字节,然后按原样写入pos,因为我知道int32是4个字节 以下是要在文件中写入的代码: for (i = 0; i < ind.word.Length; i++) { bword[i] = (

我有一个包含如下结构的文件:

public struct index
{
    public string word;         //30 bytes
    public int pos;             //4 bytes
};
对于单词,我确保在写入之前将其扩展到30个字节,然后按原样写入pos,因为我知道int32是4个字节

以下是要在文件中写入的代码:

for (i = 0; i < ind.word.Length; i++)
{
   bword[i] = (byte)idx_array[l].word[i];
}
for (; i < SIZE_WORD; i++) //30
{
   bword[i] = 0;
}
bw_idx.Write(bword, 0, SIZE_WORD);
bw_idx.Write(ind.pos);

BinaryWriter
以二进制格式编写其结果。如果要输出文本,请使用
StreamWriter
。文本和字节没有直接关系。你不能把它们当作一模一样


请不要通过将字符转换为字节来写入字符。如果你不知道为什么这是不可能的,请阅读有关字符编码。这是每个程序员都需要具备的基本知识。

BinaryWriter
以二进制格式编写其结果。如果要输出文本,请使用
StreamWriter
。文本和字节没有直接关系。你不能把它们当作一模一样


请不要通过将字符转换为字节来写入字符。如果你不知道为什么这是不可能的,请阅读有关字符编码。这是每个程序员都需要具备的基础知识。

我想你最好使用十六进制编辑器而不是记事本++。是一个很好的开源软件。还要检查是否已正确关闭(或刷新)文件。此外,我没有看到
FileStream.Write(Int32)
。你的意思是?它是封闭的,即使我刷新了它也不起作用。也许你应该隔离问题,并提供一个简短的、自包含的代码,让我们重现问题。正如我说的,使用十六进制编辑器而不是记事本++。我想你最好使用十六进制编辑器而不是记事本++。是一个很好的开源软件。还要检查是否已正确关闭(或刷新)文件。此外,我没有看到
FileStream.Write(Int32)
。你的意思是?它是封闭的,即使我刷新了它也不起作用。也许你应该隔离问题,并为我们提供一个简短的、自包含的代码来重现问题。正如我所说,使用十六进制编辑器而不是记事本++。但是的,他有点老派;)但是是的,他有点老了;)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace test_write
{
    class Program
    {
        struct enreg
        {
            public string word;
            public int pos;
        }

        const int SIZE_WORD = 30; //30 bytes
        const int SIZE_POS = 4; //4 bytes

        static byte[] bword = new byte[SIZE_WORD];        
        static byte[] bpos = new byte[SIZE_POS];

        static void Main(string[] args)
        {
            enreg enr = new enreg();

            Console.Write("word : ");
            enr.word = Console.ReadLine();
            Console.Write("\anumber : ");
            enr.pos = int.Parse(Console.ReadLine());

            FileStream fs = File.Open("temp", FileMode.Create, FileAccess.ReadWrite);
            BinaryWriter bw = new BinaryWriter(fs);

            int i = 0;
            for (i = 0; i < enr.word.Length; i++)
            {
                bword[i] = (byte)enr.word[i];
            }
            for (; i < SIZE_WORD; i++)
            {
                bword[i] = 0;
            }
            bpos = BitConverter.GetBytes(enr.pos);

            bw.Write(bword, 0, SIZE_WORD);
            bw.Write(bpos, 0, SIZE_POS);

            fs.Close();

        }
    }
}