如何将一个大文件转换成byte[]格式的数据?

程序猿GG 2009-02-25 03:34:20
一般将文件转换成byte[]的代码如下:
FileInfo fi = new FileInfo(fileName);
FileStream fs = fi.OpenRead();
int fileSize = (int)fi.Length;
byte[] img = new byte[fileSize];
fs.Read(img, 0, fileSize);

但是,现在有一个问题是, 如果一个文件有足够大, 他的大小(fi.Length)的值超过int的取值范围(65535), 该怎么做?
...全文
338 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
向良玉 2011-11-25
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 mqmmx 的回复:]

CreateFileMapping
CloseHandle
MapViewOfFile
UnmapViewOfFile

之类的API可以操作long长度的文件
[/Quote]
+1
或者分开读
mqmmx 2009-02-27
  • 打赏
  • 举报
回复
CreateFileMapping
CloseHandle
MapViewOfFile
UnmapViewOfFile

之类的API可以操作long长度的文件
huwei001982 2009-02-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 soaringbird 的回复:]
谁说32位系统文件大小不能超过2G?那4.3G大小的720p电影文件是怎么回事?
FAT32的文件系统的文件最大是4G,NTFS的的没有这个限制。
[/Quote]
是我搞错了, FAT32 的应该是4G
没落鬼族 2009-02-25
  • 打赏
  • 举报
回复
太大了就分开读

FileInfo fi = new FileInfo(fileName);
FileStream fs = fi.OpenRead();

long fileSize = fi.Length;
byte[] img = new byte[fileSize];

int buffer = 1024;
int offset = 0;

while(offset <fileSize)
{
fs.Read(img, offset, buffer);
offset += buffer;
}


不知道这样行不行呵呵
soaringbird 2009-02-25
  • 打赏
  • 举报
回复
谁说32位系统文件大小不能超过2G?那4.3G大小的720p电影文件是怎么回事?
FAT32的文件系统的文件最大是4G,NTFS的的没有这个限制。
huwei001982 2009-02-25
  • 打赏
  • 举报
回复
int 的最大值不是 65536,而是 2147483647 (2G)。

这已经达到 32 位系统文件大小的极限,在32位系统中,单个文件大小不能超过 2G。

所以楼主可以打消顾虑了
ShinNakoruru 2009-02-25
  • 打赏
  • 举报
回复
我想知道的是为什么那么大的文件要一次读入内存呢?
_see_you_again_ 2009-02-25
  • 打赏
  • 举报
回复
byte[] img = File.ReadAllBytes(fileName);
程序猿GG 2009-02-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 gaopeng95809 的回复:]
用long型
[/Quote]

但是fs.Read(img, 0 , fileSize)中的fileSize不支持long型呀
jinjazz 2009-02-25
  • 打赏
  • 举报
回复
int是32位的
gaopeng95809 2009-02-25
  • 打赏
  • 举报
回复
用long型
zgke 2009-02-25
  • 打赏
  • 举报
回复
.NET 默认INT 是32位的
zgke 2009-02-25
  • 打赏
  • 举报
回复
int的取值范围
-2,147,483,648 到 2,147,483,647

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧