当前位置:首页 » 编程语言 » c语言扫描硬盘文件目录
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言扫描硬盘文件目录

发布时间: 2023-08-05 12:03:54

⑴ 怎么用c语言从某个硬盘上读入文件

#include
"stdio.h"
int
main()
{
FILE
*fp=NULL;
int
ch;
fp=fopen("D:\\sample.txt","r");
//打开文件,需要注意的是,你必须把该文件放在D盘下,不然会报错
while(1)
{
ch=fgetc(fp);
//
if(ch==EOF)/*end
of
file文件末尾*/
break;
printf("%c",ch);
}
//读取数据,直到文件末尾,读取一个数据就输出一个数据
fclose(fp);
//关闭文件
return
0;
}
调试无误。
要把数据存到a[i],改下就行,
int
i=0,a[100];
把上面的变量ch的值赋给数组就行
a[i++]=ch;

⑵ 怎么用C语言编程遍历文件夹下所有文件名


/**************************************************
这是CBrowseDir的类定义文件BrowseDir.h

/**************************************************
#include"stdlib.h"

classCBrowseDir
{
protected:
//存放初始目录的绝对路径,以''结尾
charm_szInitDir[_MAX_PATH];

public:
//缺省构造器
CBrowseDir();

//设置初始目录为dir,如果返回false,表示目录不可用
boolSetInitDir(constchar*dir);

//开始遍历初始目录及其子目录下由filespec指定类型的文件
//filespec可以使用通配符*?,不能包含路径。
//如果返回false,表示遍历过程被用户中止
boolBeginBrowse(constchar*filespec);

protected:
//遍历目录dir下由filespec指定的文件
//对于子目录,采用迭代的方法
//如果返回false,表示中止遍历文件
boolBrowseDir(constchar*dir,constchar*filespec);

//函数BrowseDir每找到一个文件,就调用ProcessFile
//并把文件名作为参数传递过去
//如果返回false,表示中止遍历文件
//用户可以覆写该函数,加入自己的处理代码
virtualboolProcessFile(constchar*filename);

//函数BrowseDir每进入一个目录,就调用ProcessDir
//并把正在处理的目录名及上一级目录名作为参数传递过去
//如果正在处理的是初始目录,则parentdir=NULL
//用户可以覆写该函数,加入自己的处理代码
//比如用户可以在这里统计子目录的个数
virtualvoidProcessDir(constchar
*currentdir,constchar*parentdir);
};


/*********************************************/

这是CBrowseDir的类实现文件BrowseDir.cpp

/***********************************************/
#include"stdlib.h"
#include"direct.h"
#include"string.h"
#include"io.h"

#include"browsedir.h"

CBrowseDir::CBrowseDir()
{
//用当前目录初始化m_szInitDir
getcwd(m_szInitDir,_MAX_PATH);

//如果目录的最后一个字母不是'',则在最后加上一个''
intlen=strlen(m_szInitDir);
if(m_szInitDir[len-1]!='\')
strcat(m_szInitDir,"\");
}

boolCBrowseDir::SetInitDir(constchar*dir)
{
//先把dir转换为绝对路径
if(_fullpath(m_szInitDir,dir,_MAX_PATH)==NULL)
returnfalse;

//判断目录是否存在
if(_chdir(m_szInitDir)!=0)
returnfalse;

//如果目录的最后一个字母不是'',则在最后加上一个''
intlen=strlen(m_szInitDir);
if(m_szInitDir[len-1]!='\')
strcat(m_szInitDir,"\");

returntrue;
}

boolCBrowseDir::BeginBrowse(constchar*filespec)
{
ProcessDir(m_szInitDir,NULL);
returnBrowseDir(m_szInitDir,filespec);
}

boolCBrowseDir::BrowseDir
(constchar*dir,constchar*filespec)
{
_chdir(dir);

//首先查找dir中符合要求的文件
longhFile;
_finddata_tfileinfo;
if((hFile=_findfirst(filespec,&fileinfo))!=-1)
{
do
{
//检查是不是目录
//如果不是,则进行处理
if(!(fileinfo.attrib&_A_SUBDIR))
{
charfilename[_MAX_PATH];
strcpy(filename,dir);
strcat(filename,fileinfo.name);
if(!ProcessFile(filename))
returnfalse;
}
}while(_findnext(hFile,&fileinfo)==0);
_findclose(hFile);
}

//查找dir中的子目录
//因为在处理dir中的文件时,派生类的ProcessFile有可能改变了
//当前目录,因此还要重新设置当前目录为dir。
//执行过_findfirst后,可能系统记录下了相关信息,因此改变目录
//对_findnext没有影响。
_chdir(dir);
if((hFile=_findfirst("*.*",&fileinfo))!=-1)
{
do
{
//检查是不是目录
//如果是,再检查是不是.或..
//如果不是,进行迭代
if((fileinfo.attrib&_A_SUBDIR))
{
if(strcmp(fileinfo.name,".")!=0&&strcmp
(fileinfo.name,"..")!=0)
{
charsubdir[_MAX_PATH];
strcpy(subdir,dir);
strcat(subdir,fileinfo.name);
strcat(subdir,"\");
ProcessDir(subdir,dir);
if(!BrowseDir(subdir,filespec))
returnfalse;
}
}
}while(_findnext(hFile,&fileinfo)==0);
_findclose(hFile);
}
returntrue;
}

boolCBrowseDir::ProcessFile(constchar*filename)
{
returntrue;
}

voidCBrowseDir::ProcessDir(constchar
*currentdir,constchar*parentdir)
{
}


/*************************************************
这是例子example.cpp

/*************************************************
#include"stdio.h"

#include"BrowseDir.h"

//从CBrowseDir派生出的子类,用来统计目录中的文件及子目录个数
classCStatDir:publicCBrowseDir
{
protected:
intm_nFileCount;//保存文件个数
intm_nSubdirCount;//保存子目录个数

public:
//缺省构造器
CStatDir()
{
//初始化数据成员m_nFileCount和m_nSubdirCount
m_nFileCount=m_nSubdirCount=0;
}

//返回文件个数
intGetFileCount()
{
returnm_nFileCount;
}

//返回子目录个数
intGetSubdirCount()
{
//因为进入初始目录时,也会调用函数ProcessDir,
//所以减1后才是真正的子目录个数。
returnm_nSubdirCount-1;
}

protected:
//覆写虚函数ProcessFile,每调用一次,文件个数加1
virtualboolProcessFile(constchar*filename)
{
m_nFileCount++;
returnCBrowseDir::ProcessFile(filename);
}

//覆写虚函数ProcessDir,每调用一次,子目录个数加1
virtualvoidProcessDir
(constchar*currentdir,constchar*parentdir)
{
m_nSubdirCount++;
CBrowseDir::ProcessDir(currentdir,parentdir);
}
};

voidmain()
{
//获取目录名
charbuf[256];
printf("请输入要统计的目录名:");
gets(buf);

//构造类对象
CStatDirstatdir;

//设置要遍历的目录
if(!statdir.SetInitDir(buf))
{
puts("目录不存在。");
return;
}

//开始遍历
statdir.BeginBrowse("*.*");

//统计结果中,子目录个数不含.及..
printf("文件总数:%d 子目录总数:
%d ",statdir.GetFileCount(),
statdir.GetSubdirCount());
}

⑶ c语言中怎么确定信息所写入文件在硬盘中的位置呢最起码盘符应该知道吧

如果是windows盘符自然就包含在路径中了,注意如果相对路径,那么文件夹所在的盘符就是打开文件的盘符。Linux一般没有盘符一说。位置是你打开文件时执行的函数锁定的,如果你想了解更多可以看一下使用的库的头文件,源码更好,这类函数中最基本的当然就是fopen了。fopen把信息都放到了一个结构体中,其实你可以自由查看,甚至更改,不过注意有时候结果是很自由的,比如当写的文件的位置被改成磁盘的逻辑0位置。

⑷ 如何用C语言扫描硬盘里的文件

HANDLE FindFirstFile(
LPCTSTR lpFileName, // file name
LPWIN32_FIND_DATA lpFindFileData // data buffer
);
BOOL FindNextFile(
HANDLE hFindFile, // search handle
LPWIN32_FIND_DATA lpFindFileData // data buffer
);

这两个API就行了,详情参考MSDN。记住要包含 windows.h 这个头文件。

⑸ 我要用c编写程序读写磁盘,在linux中磁盘为文件,怎样用c语言获取磁盘的文件描述符,然后对磁盘进行读写

linux下面的概念是一切皆文件。所以没有像c盘d盘这样的东西,有的只是各种各样的文件夹和文件。要读一个linux下面的文件很简单,命令pwd可以得到当前路径,然后路径接上你打开的文件名就可以知道这个文件的详细路径了。直接open就可以了。

⑹ 怎么用C语言编写一个程序,可以搜索电脑里的文件

//***************全盘搜索指定文件*******************
//**************************************************
//**使用递归来搜索文件,效率低,使用多线程效果更好**
//**************************************************
#include<stdio.h>
#include<windows.h>

void FindFile(char*,char*);
int count=0;//统计文件数
char fname[32];
#define BUFSIZE 256
int main(int argc,char*argv[])
{
char szLogicalDriveStrings[BUFSIZE];
DWORD iLength;
int iSub;
printf("请输入要搜索的文件名");
scanf("%s",fname);
ZeroMemory(szLogicalDriveStrings, BUFSIZE);
iLength = GetLogicalDriveStringsA(BUFSIZE-1, szLogicalDriveStrings);
for(iSub=0;iSub<iLength;iSub+=4)
{
//如果不是固定磁盘驱动器:本地硬盘或移动硬盘,忽略
if(GetDriveType(szLogicalDriveStrings+iSub)!=3)
continue;
FindFile(szLogicalDriveStrings+iSub,"*.*");
}
printf("一共发现%d个文件..\n",count);
scanf("%*d");
return 0;
}
void FindFile(char*pfilename,char*pfilter)
{
WIN32_FIND_DATA findfiledate;
HANDLE hfind;
char filename[512];
char ipFileName[512];
char _ipFileName[512];
int i;
int result;
for (i=0;*(pfilename+i)!='\0';i++)
filename[i]=*(pfilename+i);
filename[i]='\0';
//如果最后一个字符不是‘\’
if(filename[strlen(filename)-1]!='\\')
strcat(filename,"\\");//添加"\"
strcpy(ipFileName,filename);
strcat(ipFileName,pfilter);
hfind=FindFirstFile(ipFileName,&findfiledate);
if(hfind==INVALID_HANDLE_VALUE)
return;
do
{
//如果不是目录
if(!(findfiledate.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY))
{
//如果找到指定文件
if(0==strcmp(fname,findfiledate.cFileName))
{
printf("%s%s\n",filename,findfiledate.cFileName);
count++;
}
}
//如果是目录
else
{
//.和..不输出
if(findfiledate.cFileName[0]!='.')
{
strcpy(_ipFileName,filename);
strcat(_ipFileName,findfiledate.cFileName);
FindFile(_ipFileName,pfilter);//递归
}
}
}while(FindNextFile(hfind,&findfiledate));//FindNextFile返回为真,继续搜索
FindClose(hfind);
return;
}

非原作者