0

私は次のコードを持っています:

LZW lzw = new LZW();
int[] a = lzw.Encode(imageBytes);

FileStream fs = new FileStream("image-text-16.txt", FileMode.Append);
BinaryWriter w = new BinaryWriter(fs);

for (int i = 0; i < a.Length; i++)
{
   w.Write(a[i]);

}

w.Close();
fs.Close();

ファイルから配列要素を読み取る方法は?私はいくつかの方法を試しました。たとえば、配列の長さをファイルに書き込んで、数値を読み取ろうとしました。しかし、私は失敗しました。

ノート。int配列を取得する必要があります。

4

2 に答える 2

7

あなたはこれを探していますか:

var bytes = File.ReadAllBytes(@"yourpathtofile");

またはもっと何かのようなもの:

        using (var filestream = File.Open(@"C:\apps\test.txt", FileMode.Open))
        using (var binaryStream = new BinaryReader(filestream))
        {
            for (var i = 0; i < arraysize; i++)
            {
                Console.WriteLine(binaryStream.ReadInt32());
            }
        }

または、単体テストの小さな例:

整数でバイナリファイルを作成します。

    [Test]
    public void WriteToBinaryFile()
    {
        var ints = new[] {1, 2, 3, 4, 5, 6, 7};

        using (var filestream = File.Create(@"c:\apps\test.bin"))
        using (var binarystream = new BinaryWriter(filestream))
        {
            foreach (var i in ints)
            {
                binarystream.Write(i);
            }
        }
    }

そして、バイナリファイルからの読み取りの小さな例のテスト

    [Test]
    public void ReadFromBinaryFile()
    {
        // Approach one
        using (var filestream = File.Open(@"C:\apps\test.bin", FileMode.Open))
        using (var binaryStream = new BinaryReader(filestream))
        {
            var pos = 0;
            var length = (int)binaryStream.BaseStream.Length;
            while (pos < length)
            {
                var integerFromFile = binaryStream.ReadInt32();
                pos += sizeof(int);
            }
        }
    }

バイナリファイルから読み取る別のアプローチ

    [Test]
    public void ReadFromBinaryFile2()
    {
        // Approach two
        using (var filestream = File.Open(@"C:\apps\test.bin", FileMode.Open))
        using (var binaryStream = new BinaryReader(filestream))
        {
            while (binaryStream.PeekChar() != -1)
            {
                var integerFromFile = binaryStream.ReadInt32();
            }
        }
    }
于 2013-02-09T13:36:27.607 に答える
1

逆だと思います。唯一のことは、それを読む前にサイズがわからないということですので、最初にそれを計算してください。ああ、私は「using」を使用して、物事が適切に廃棄(およびクローズ)されていることを確認します:

        int[] ll;
        using (FileStream fs = File.OpenRead("image-text-16.txt"))
        {
            int numberEntries = fs.Length / sizeof(int);
            using (BinaryReader br = new BinaryReader(fs))
            {
                ll = new int[numberEntries];
                for (int i = 0; i < numberEntries; ++i)
                {
                    ll[i] = br.ReadInt32();
                }
            }
        }
        // ll is the result

私が本当に理解していないのは、なぜLZWからint []を書いているのかということですが、それには理由があると思います...

于 2013-02-09T13:53:27.443 に答える