2

私が必要とする助けは、それぞれ1024バイトの長さの複数のバイト配列を1つのバイト配列に結合してファイルを作成する方法を知ることです。

複数のファイルをSAPに送信する必要があるため、これを行う必要がありますが、ファイルは1024(byte [1024])のバイト配列に分割する必要があり、ファイルを分割した後、このファイルをコレクションに保存します。私が抱えている問題は、ファイルがSAPで作成されたときに、これが破損していることです。そして、ファイルを分割するときに問題を破棄したい

これは私がファイルを分割するために使用している方法です

for (int i = 0; i < attachRaw.Count(); i++)
        {
            countLine = attachRaw[i].content.Length / 1024;
            if (attachRaw[i].content.Length % 1024 != 0)
                countLine++;
            ZFXX_ATTATTACHMENT_VBA[] attachArray = new ZFXX_ATTATTACHMENT_VBA[countLine];               
            for (int y = 0; y < countLine; y++)
            {
                ZFXX_ATTATTACHMENT_VBA attach = new ZFXX_ATTATTACHMENT_VBA();
                attach.CONTENT = new byte[i == (countLine - 1) ? (attachRaw[i].content.Length - i * 1024) : 1024];
                if (i == (countLine - 1))
                {
                    countLine++;
                    countLine--;
                }
                if (attachRaw[i].content.Length < 1024)
                {
                    attach.CONTENT = attachRaw[i].content;
                }
                else
                {
                    attach.CONTENT = FractionByteArray(i * 1024, (i == (countLine - 1) ? attachRaw[i].content.Length : (i * 1024 + 1024)), attachRaw[i].content);
                }
                attach.FILE_LINK = attachRaw[i].fileLink;
                attachmentRaw.Add(attach);

            }

        }


private static byte[] FractionByteArray(int start, int finish, byte[] array)
    {
        byte[] returnArray = new byte[finish - start];

        for (int i = 0; i < finish - start; i++)
        {
            returnArray[i] = array[start + i];
        }
        return returnArray;
    }
4

1 に答える 1

8

BlockCopyすべてのアレイを結合するために使用できます。

何かのようなもの:

    private byte[] JoinArrays(IEnumerable<byte[]> arrays)
    {
        int offset = 0;
        byte[] fullArray = new byte[arrays.Sum(a => a.Length)];
        foreach (byte[] array in arrays)
        {
            Buffer.BlockCopy(array, 0, fullArray, offset, array.Length);
            offset += array.Length;
        }
        return fullArray;
    }
于 2013-02-25T03:36:36.220 に答える