ToArray()函数限制

时间:2017-02-27 07:23:34

标签: c# arrays toarray

我使用INT 3方法将我的字符串转换为.ToArray()数组,其大小保持char但是当我使用以下代码时:

char[] buffer = new char[1000000];

缓冲区的大小固定为8190,即使在使用using (StreamReader streamReader = new StreamReader(path1)) { buffer = streamReader.ReadToEnd().ToCharArray(); } // buffer = result.ToArray(); threadfunc(data_path1); .ToCharArray()后也没有读取整个文件。 .ToArray().ToCharArray()具有尺寸限制的原因是什么?好像我不使用这个函数我能够以字符串格式读取整个文件,但是当我尝试使用这个函数将它转换为char数组时,我的大小有限。

4 个答案:

答案 0 :(得分:2)

我的猜测是问题是在你调用ToCharArray()之前读取结束应该完成。这可能对你有帮助。您不需要定义缓冲区,因为ToCharArray()会自己创建char[]的新实例。

string content;
using (StreamReader streamReader = new StreamReader(path1))
{
    content = streamReader.ReadToEnd();
}
var buffer = content.ToCharArray();

答案 1 :(得分:1)

ToCharArray()返回数组的新实例。因此,您的buffer将引用新实例,该实例是ReadToEnd返回的数据大小。

如果你想保持buffer相同的大小,只需将新数组添加到现有数组

char[] buffer = new char[1000000];
using (StreamReader streamReader = new StreamReader(path1))
{
    var tempArray = streamReader.ReadToEnd().ToCharArray();
    tempArray.CopyTo(buffer, 0);
}

如果你只想使用结果数组 - 你不需要“预测”数组的大小 - 只需使用返回的数据

public char[] GetArrayFromFile(string pathToFile)
{
    using (StreamReader streamReader = new StreamReader(path1))
    {
        var data = streamReader.ReadToEnd();
    }
    return data.ToCharArray();
}    

var arrayFromFile = GetArrayFromFile(@"..\path.file");

答案 2 :(得分:0)

您可能使用了错误的编码。默认情况下,StreamReader(String)使用UTF8编码:

  

完整的文件路径由path参数指定。这个   构造函数将编码初始化为UTF8Encoding和缓冲区   大小为1024字节。

除非您有特殊需要,否则不要预先分配缓冲区大小。

如果您的文件是ASCII格式,则需要更新StreamReader构造函数:

char[] buffer = null;

using (StreamReader streamReader = new StreamReader(path1, Encoding.ASCII))
{
    buffer = streamReader.ReadToEnd().ToCharArray();
}
// buffer = result.ToArray();
threadfunc(data_path1);

答案 3 :(得分:0)

您的文件是否包含二进制数据?如果它包含EOF字符并且以文本模式打开流(StreamReader执行),则该字符将发出文件结束信号,即使它实际上不是文件的末尾。

我可以通过在文本模式下阅读随机.exe文件来重现这一点。