能力值:
( LV2,RANK:10 )
|
-
-
2 楼
估计你以文本方式打开
你试试 fopen(文件名,"rb")看
|
能力值:
( LV8,RANK:120 )
|
-
-
3 楼
不行
这貌似跟什么方式打开没啥关系吧
MFC里的FILE类型
默认的缓冲区大小就是0x1000
它打开后就读取0x1000(如何文件大小大于0x1000)
我用fget和fread都只是在这个缓冲区里获取
所以当大小超过0x1000后,就根本获取不了
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
这个你应该看看
fopen 和 fgets 函数的帮助
缓冲区不需要你自己去更新的,对你是透明的
你fgets的时候,他自己会决定更新的
|
能力值:
( LV8,RANK:120 )
|
-
-
5 楼
可是。。。
我for(int i = 0 ;i<10000;i++)
{
S = fget(file);
}
当i超过0x1000后
根本就没更新..
S获得的一直是0xff
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
你中间需要判断 EOF 如果eof 返回为true ,那么就是已经到了文件结尾了,你怎么读都没用了……
如果判断出 eof 那么你的循环就要 break;
参考函数 int feof( FILE * );
|
能力值:
( LV8,RANK:120 )
|
-
-
7 楼
FILE* file;
file = fopen(name,"rd");
if(file!=NULL)
{
fseek(file, 0L, SEEK_SET);
fseek(file, 0L, SEEK_END);
filelen = ftell(file);
filebuffer = (char*)malloc(filelen);
fseek(file, 0L, SEEK_SET);
for(int i = 0;i<filelen;i++)
{
s = fread(filebuffer,1,1,file);
filebuffer[i] = s;
if(i % 4096 == 0)
{
i =i;
}
}
不是你想的那样
我是读取一个3MB的文件
到了0x1000后
fget就没用了
上面是代码
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
那就是如何修改_base的问题了 能不能照这个思路google一下 关注中
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
在一轮4096后使用feek(file, 4096, SEEK_CUR)
试试在每一次读满4096字节后移动文件指针 看文件指针所指向的结构体会不会自己清空base缓冲区
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
s = fread(filebuffer,1,1,file);
filebuffer[i] = s;
这两句写的蛮怪异, s应该总是1或0, 正确写法应该是(除非你有意这样做)
s = fread(filebuffer+i,1,1,file);
你可以检查4096后, s是否为1(fread读一个字符), 如果为0, 使用ferror or feof 去检查为啥错
|
能力值:
( LV8,RANK:120 )
|
-
-
11 楼
不好意思
复制错了
那些都是我调试时候试验的
原来的是
for(int i = 0;i<filelen;i++)
{
s = fgetc(file);
filebuffer[i] = s;
if(i % 4096 == 0)
{
i =i;
}
}
|
能力值:
( LV8,RANK:120 )
|
-
-
12 楼
晕
太奇怪了。。。。
我换了个文件
发现又成功了
可是原来的就是不行
我原来的是 打开"ntoskrnl.exe"
确实如smallkin所说
缓冲区是自动更新的
而且我跟了一下
当i = 1008后
s读取的就一直是0xff
用getlasterror 得到的是0:操作成功
我本来是想写个代码定位器
想把内核里的代码和文件想对应起来
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
应该用ferror而不是getlasterror, 具体你去查ms手册
|
|
|