有高手研究过:通过获取硬盘信息而取得文件目录列表吗?请进来指导!

purplelucy 2005-04-28 04:07:28
谢谢先。
...全文
189 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
maplevsred 2005-05-08
  • 打赏
  • 举报
回复
我觉得直接读入扇区来取得目录结构不会比API快,因为你不能保证你的代码读入及处理数据的速度比Windows快。Windows不提供直接访问磁盘绝对扇区的方式(实际上有,通过CreatFile 可以打开驱动器设备,访问到磁盘扇区,但是不允许写入,呵呵)。
  我是通过另外的方式访问的扇区,但由于自身水平有限,进行绝对扇区读写的速度极慢,且在9X下和NT系列下是使用的不同的代码。只是我访问扇区的目的和你不一样,并不追求效率。
  过会儿给你邮箱发一段以前写的测试性的代码,9x和NT都可以用的,使用的CHS模式,8.4G之后的内容访问不到(我当时要做的只需要访问前几个扇区,因此没有使用LAB模式)。
  还是建议直接使用API,并不算太慢,我的代码只能做参考,里面只是读写扇区的代码,你要加上通过读取的数据分析出目录结构的代码,而且我的代码很慢。
  
an_bachelor 2005-04-30
  • 打赏
  • 举报
回复
http://www.redflag-linux.com.cn/
mli0080 2005-04-30
  • 打赏
  • 举报
回复
UP一下
purplelucy 2005-04-29
  • 打赏
  • 举报
回复
读扇区的方法中,如何找到文件跟目录的位置,并读出后续所有文件目录信息呢?
purplelucy 2005-04-29
  • 打赏
  • 举报
回复
顶一下,请高手指教!
zxwitsme 2005-04-29
  • 打赏
  • 举报
回复
看看FAT文件系统的文档吧
purplelucy 2005-04-29
  • 打赏
  • 举报
回复
楼上的,能给提供个链接吗?谢了。
an_bachelor 2005-04-29
  • 打赏
  • 举报
回复
NTFS的肯定比較複雜
但是我曾經用過紅旗Linux好像是支持讀NTFS的
那個是開源的可以借來看看

不過在保護模式下直接調用int 13h讀分區表是行不通的
我又回来了`` 2005-04-29
  • 打赏
  • 举报
回复
gz
purplelucy 2005-04-28
  • 打赏
  • 举报
回复
sungengyu(快乐机器) :我只是想尝试,在频繁访问的前提下,这样取目录列表会不会比调用API效率高一些。:)
PS:能指导一下吗?!
sungengyu 2005-04-28
  • 打赏
  • 举报
回复
purplelucy(忘忧草) : 这样做有什么好处么?还不是和调用API一样么?

rushinger(阮祥哥) 的代码是用 MFC 的CFileFind 类,没有读取扇区。
purplelucy 2005-04-28
  • 打赏
  • 举报
回复
maplevsred(残桓枫雪) :就是你说的这个意思。:)能不能给点代码参考一下,谢了。偶可以多给分表心意。;)

rushinger(阮祥哥) :一会仔细看你提供的程序。谢谢关注先。:)
xqk(夏乾坤) :谢谢关注先。就是通过读取扇区,用自己的程序把文件目录列出来,谢谢指导。:)
maplevsred 2005-04-28
  • 打赏
  • 举报
回复
你是不是说通过读取扇区,用自己的程序把分区表和文件目录列出来?Fat16和Fat32的以前做过一点,还有软盘使用的Fat12,NTFS的没有碰过。
xqk 2005-04-28
  • 打赏
  • 举报
回复
通过硬盘信息? 不懂你具体什么意思

硬盘信息返回的是硬盘序列号,磁盘大小,磁盘分区,分区格式,卷标什么玩应儿的,
跟遍历目录有啥关系呀
rushinger 2005-04-28
  • 打赏
  • 举报
回复
以上是递归使用CFileFind类进行搜索,
如果只要文件夹的列表就更简单了:CMD命令里有一个“TREE”: Tree > tree.txt
rushinger 2005-04-28
  • 打赏
  • 举报
回复
不再整理了,参考一下吧

void CFileTree::FolderSearch(CString strFolder, HTREEITEM hParent)
{
if(strFolder.Right(1) != "\\")
strFolder += "\\";

HTREEITEM hCurrent = InsertItem(CurrentFolderName(strFolder), hParent);
//HTREEITEM hCurrent = InsertItem(CurrentFolderName(strFolder), 0, 1, hParent);
SetItemData(hCurrent, -2);//该值表示当前项为文件夹
if(hParent == NULL)
m_hRoot = hCurrent;

CString strItemName;
CFileFind fileFind;
BOOL bResult = fileFind.FindFile(strFolder + "*.*");
while(bResult)
{
bResult = fileFind.FindNextFile();

strItemName = fileFind.GetFileName();
if(fileFind.IsDots())
continue;
else if(fileFind.IsDirectory())
{
FolderSearch(strFolder + strItemName + "\\", hCurrent);
}
else if(strItemName != _T("Thumbs.db"))
{
HTREEITEM hFile = InsertItem(fileFind.GetFileName(), hCurrent);
if(hFile == NULL)
break;
SetItemData(hFile, fileFind.GetLength());
}
}
}

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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