由于程序需要,我得一个一个字节的读文件
在tc 中 FILE *fp;
char ch;
if((fp=fopen("1.dat","rb"))==NULL)
exit(0);
ch = fgetc(fp);
while(ch!=EOF)
{ ch = fgetc(fp);}
fclose(fp);//就是读一个文件 我循环500次 用了5秒不到 . 1.dat 为 54.8K 在VC中
CFile sourceFile;
BYTE buffer[1];
DWORD dwRead;
CFileException ex;
for(int i=0;i<500;i++)
{
if (!sourceFile.Open("1.dat",CFile::modeRead | CFile::shareDenyWrite, &ex)
)
{
AfxMessageBox("打开文件错误");
}
do
{
dwRead = sourceFile.Read(buffer, 1);
} while (dwRead > 0);
sourceFile.Close();
}
//这里所用的时间居然是 50秒 .
50/5=10
大家有什么好的方法 可以提高在VC中读取的速度. 前提是一个一个字节的读.
并且读文件的模式要 :CFile::modeRead | CFile::shareDenyWrite
谢谢 !
另:
打开和关闭文件放在循环里 影响不大 0.01%
读文件的模式也没影响.
dwRead = sourceFile.Read(buffer, 1);好像这个语句比较费时间. //不是很难 是非常非常的难.
可是为什么在TC中用的时间那么少? 它是把文件读到内存去了 然后在读内存 ?
在VC中 难道是直接从磁盘读 ?
BYTE buffer[1];
DWORD dwRead;
CFileException ex;
if (!sourceFile.Open("1.dat",CFile::modeRead | CFile::shareDenyWrite, &ex))
{
AfxMessageBox("打开文件错误");
}
while(sourceFile.Read(buffer, 1) > 0);
sourceFile.Close();
同TC中类似功能。
问题很负责
http://expert.csdn.net/Expert/topic/1894/1894147.xml?temp=.9261743
可是换了VC中这种方式打开文件慢了很多.
压缩一个文件看不出来 压缩多个文件时间差了有5倍
所以做了个循环读文件比较 发现VC这种方式慢了很多.
TC下的FOPEN打开了文件 没关闭时 再用fopen就打不开这个文件了
我要的是能同时多个线程读它.
所以换了VC这种打开方式.
多谢各位了. 压缩代码都一样 就是读一个字节耗费的时间不一样.如果一次读入整个文件 再对读出的内容进行一个字节一个字节地处理 那样我的程序就得有很大得改动.