C实现目录的搜索与文件查找
CC++如何获取目录下的文件列表信息
CC++如何获取目录下的文件列表信息C/C++如何获取目录下的文件列表信息C/C++如何获取目录下的文件列表信息?下面下面就一起来了解看看具体的方法吧!1.数据结构复制代码代码如下:struct dirent{long d_ino; /* inode number 索引节点号 */off_t d_off; /* offset to this dirent 在目录文件中的偏移 */unsigned short d_reclen; /* length of this d_name 文件名长 */ unsigned char d_type; /* the type of d_name 文件类型 */char d_name [NAME_MAX+1]; /* file name (null-terminated) 文件名,最长255字符 */}struct __dirstream{void *__fd; /* `struct hurd_fd' pointer for descriptor. */char *__data; /* Directory block. */int __entry_data; /* Entry number `__data' corresponds to. */ char *__ptr; /* Current pointer into the block. */int __entry_ptr; /* Entry number `__ptr' corresponds to. */size_t __allocation; /* Space allocated for the block. */size_t __size; /* Total valid data in the block. */__libc_lock_define (, __lock) /* Mutex lock for this structure. */ };typedef struct __dirstream DIR;2.程序示例其中程序中win不支持文件类型(d_type),可以根据文件名称后缀来判断文件类型;linux可以直接使用d_type判断是目录还是文件。
C#递归读取目录里所有文件(包括子目录)及其文件操作
C#递归读取⽬录⾥所有⽂件(包括⼦⽬录)及其⽂件操作⽤到两个函数ParseDirectory 和CreatePathListvoid ParseDirectory(string path, string filter){string[] dirs = Directory.GetDirectories(path);//得到⼦⽬录IEnumerator iter = dirs.GetEnumerator();while(iter.MoveNext()){string str = (string)(iter.Current);ParseDirectory(str, filter);}string[] files = Directory.GetFiles(path, filter);if(files.Length > 0){m_numFiles += files.Length;m_pathList.Add(files);}}string[] CreatePathList(){if(m_numFiles <= 0){return null;}string[] str = new string[m_numFiles];int index = 0;try{IEnumerator pathIter = m_pathList.GetEnumerator();while(pathIter.MoveNext()){string[] ar = (string[])(pathIter.Current);IEnumerator fileIter = ar.GetEnumerator();while(fileIter.MoveNext()){str[index] = (string)(fileIter.Current);++index;}}}catch(Exception e){return null;}return str;}使⽤范例:如果要查找的:d⽬录下所有mp3⽂件string path="d:\\"; //⽬录名也可以⽤相当路径string filter="*.mp3"; //⽂件类型int m_numFiles=0; //⽂件总数ArrayList m_pathList = new ArrayList();//包含所有⽂件路径的数组string[] files; //所有⽂件名ParseDirectory(path, "*.mp3");files=CreatePathList(); //⽣成⽂件名数组if(files == null){throw new Exception(String.Concat("No file found in ", path));}⽂件处理类using System ;using System.Drawing ;using System.Collections ;using ponentModel ;using System.Windows.Forms ;using System.Data ;using System.IO ;using System.Drawing.Printing ;public class Form1 : Form{private RichTextBox richTextBox1 ;private Button button1 ;private Button button2 ;private Button button3 ;private Button button4 ;private Button button5 ;private OpenFileDialog openFileDialog1 ;private SaveFileDialog saveFileDialog1 ;private PrintDialog printDialog1 ;private PrintDocument ThePrintDocument ;private PrintPreviewDialog printPreviewDialog1 ;private StringReader myReader ;private ponentModel.Container components = null ;public Form1 ( ){//初始化窗体中的各个组件InitializeComponent ( ) ;}//清除程序中使⽤多的资源protected override void Dispose ( bool disposing ){if ( disposing ){if ( components != null ){components.Dispose ( ) ;}}base.Dispose ( disposing ) ;}private void InitializeComponent ( ){richTextBox1 = new RichTextBox ( ) ;button1 = new Button ( ) ;button2 = new Button ( ) ;button3 = new Button ( ) ;button4 = new Button ( ) ;button5 = new Button ( ) ;saveFileDialog1 = new SaveFileDialog ( ) ;openFileDialog1 = new OpenFileDialog ( ) ;printPreviewDialog1 = new PrintPreviewDialog ( ) ;printDialog1 = new PrintDialog ( ) ;ThePrintDocument = new PrintDocument ( ) ;ThePrintDocument.PrintPage += new PrintPageEventHandler ( ThePrintDocument_PrintPage ) ; SuspendLayout ( ) ;richTextBox1.Anchor = AnchorStyles.None ; = "richTextBox1" ;richTextBox1.Size = new Size ( 448 , 280 ) ;richTextBox1.TabIndex = 0 ;richTextBox1.Text = "" ;button1.Anchor = AnchorStyles.None ;button1.Location = new Point ( 41 , 289 ) ; = "button1" ;button1.Size = new Size ( 48 , 30 ) ;button1.TabIndex = 1 ;button1.Text = "打开" ;button1.Click += new System.EventHandler ( button1_Click ) ;button2.Anchor = AnchorStyles.None ;button2.Location = new Point ( 274 , 288 ) ; = "button2" ;button2.Size = new Size ( 48 , 30 ) ;button2.TabIndex = 4 ;button2.Text = "预览" ;button2.Click += new System.EventHandler ( button2_Click ) ;button3.Anchor = AnchorStyles.None ;button3.Location = new Point ( 108 , 288 ) ; = "button3" ;button3.Size = new Size ( 48 , 30 ) ;button3.TabIndex = 2 ;button3.Text = "保存" ;button3.Click += new System.EventHandler ( button3_Click ) ;button4.Anchor = AnchorStyles.None ;button4.Location = new Point ( 174 , 288 ) ; = "button4" ;button4.Size = new Size ( 80 , 30 ) ;button4.TabIndex = 3 ;button4.Text = "打印机设置" ;button4.Click += new System.EventHandler ( button4_Click ) ;button5.Anchor = AnchorStyles.None ;button5.Location = new Point ( 345 , 288 ) ; = "button5" ;button5.Size = new Size ( 48 , 30 ) ;button5.TabIndex = 5 ;button5.Text = "打印" ;button5.Click += new System.EventHandler ( button5_Click ) ;saveFileDialog1.DefaultExt = "*.txt" ;saveFileDialog1.FileName = "file.txt" ;saveFileDialog1.InitialDirectory = "c:\\" ;saveFileDialog1.Title = "另存为!" ;openFileDialog1.DefaultExt = "*.txt" ;openFileDialog1.FileName = "file.txt" ;openFileDialog1.InitialDirectory = "c:\\" ;openFileDialog1.Title = "打开⽂本⽂件!" ;AutoScaleBaseSize = new Size ( 6 , 14 ) ;ClientSize = new Size ( 448 , 325 ) ;this.Controls.Add ( button1 ) ;this.Controls.Add ( button2 ) ;this.Controls.Add ( button3 ) ;this.Controls.Add ( button4 ) ;this.Controls.Add ( button5 ) ;this.Controls.Add ( richTextBox1 ) ;this.MaximizeBox = false ; = "Form1" ;this.Text = "C#来操作⽂本⽂件" ;this.ResumeLayout ( false ) ;}static void Main ( ){Application.Run ( new Form1 ( ) ) ;}private void button1_Click ( object sender , System.EventArgs e ){try{if ( openFileDialog1.ShowDialog ( ) == DialogResult.OK ){FileStream fs = new FileStream ( openFileDialog1.FileName , FileMode.Open , FileAccess.Read ) ;StreamReader m_streamReader = new StreamReader ( fs ) ;//使⽤StreamReader类来读取⽂件m_streamReader.BaseStream.Seek ( 0 , SeekOrigin.Begin ) ;// 从数据流中读取每⼀⾏,直到⽂件的最后⼀⾏,并在richTextBox1中显⽰出内容this.richTextBox1.Text = "" ;string strLine = m_streamReader.ReadLine ( ) ;while ( strLine != null ){this.richTextBox1.Text += strLine + "\n" ;strLine = m_streamReader.ReadLine ( ) ;}//关闭此StreamReader对象m_streamReader.Close ( ) ;}}catch ( Exception em ){Console.WriteLine ( em.Message.ToString ( ) ) ;}}private void button3_Click ( object sender , System.EventArgs e ){try{//获得另存为的⽂件名称if ( saveFileDialog1.ShowDialog ( ) == DialogResult.OK ){//创建⼀个⽂件流,⽤以写⼊或者创建⼀个StreamWriterFileStream fs = new FileStream ( @saveFileDialog1.FileName , FileMode.OpenOrCreate , FileAccess.Write ) ; StreamWriter m_streamWriter = new StreamWriter ( fs ) ;m_streamWriter.Flush ( ) ;// 使⽤StreamWriter来往⽂件中写⼊内容m_streamWriter.BaseStream.Seek ( 0 , SeekOrigin.Begin ) ;// 把richTextBox1中的内容写⼊⽂件m_streamWriter.Write ( richTextBox1.Text ) ;//关闭此⽂件m_streamWriter.Flush ( ) ;m_streamWriter.Close ( ) ;}}catch ( Exception em ){Console.WriteLine ( em.Message.ToString ( ) ) ;}}private void button4_Click ( object sender , System.EventArgs e ){printDialog1.Document = ThePrintDocument ;printDialog1.ShowDialog ( ) ;}//预览打印⽂档private void button2_Click ( object sender , System.EventArgs e ){try{string strText = richTextBox1.Text ;myReader = new StringReader ( strText ) ;PrintPreviewDialog printPreviewDialog1 = new PrintPreviewDialog ( ) ;printPreviewDialog1.Document = ThePrintDocument ;printPreviewDialog1.FormBorderStyle = FormBorderStyle.Fixed3D ;printPreviewDialog1.ShowDialog ( ) ;}catch ( Exception exp ){Console.WriteLine ( exp.Message.ToString ( ) ) ;}}//打印richTextBox1中的内容private void button5_Click ( object sender , System.EventArgs e ){printDialog1.Document = ThePrintDocument ;string strText = richTextBox1.Text ;myReader = new StringReader ( strText ) ;if ( printDialog1.ShowDialog ( ) == DialogResult.OK ){ThePrintDocument.Print ( ) ;}}protected void ThePrintDocument_PrintPage ( object sender , PrintPageEventArgs ev ){float linesPerPage = 0 ;float yPosition = 0 ;int count = 0 ;float leftMargin = ev.MarginBounds.Left ;float topMargin = ev.MarginBounds.Top ;string line = null ;Font printFont = richTextBox1.Font ;SolidBrush myBrush = new SolidBrush ( Color.Black ) ;//计算每⼀页打印多少⾏linesPerPage = ev.MarginBounds.Height / printFont.GetHeight ( ev.Graphics ) ;//重复使⽤StringReader对象 ,打印出richTextBox1中的所有内容while ( count < linesPerPage && ( ( line = myReader.ReadLine ( ) ) != null ) ){// 计算出要打印的下⼀⾏所基于页⾯的位置yPosition = topMargin + ( count * printFont.GetHeight ( ev.Graphics ) ) ;// 打印出richTextBox1中的下⼀⾏内容ev.Graphics.DrawString ( line , printFont , myBrush , leftMargin , yPosition , new StringFormat ( ) ) ; count++ ;}// 判断如果还要下⼀页,则继续打印if ( line != null )ev.HasMorePages = true ;elseev.HasMorePages = false ;myBrush.Dispose ( ) ;}}。
一个C++类实现文件全盘搜索
一个C++类实现文件全盘搜索想索取更多相关资料请加qq:649085085或登录PS;本文档由北大青鸟广安门收集自互联网,仅作分享之用。
这是我以前写的一个C++的类,可以在硬盘上全盘搜索指定的文件(可以用通配符),还可以添加过滤器,以便搜索特定的文件。
该类使用链表储存搜索结果(学了那么多数据结构,总算可以用一把了),性能还是可以的。
虽说没什么技术含量,但也挺有用的下面就是这个类的代码,包括测试程序,原本我没有写注释,现在加上了一些。
这个居然不支持C++的代码插入,只好用C#的来将就一下了。
#include <windows.h>#include <shlwapi.h>#include <iostream>#pragma comment(lib,"shlwapi.lib")using namespace std;//定义过滤器的最大数量#define CONST_MAX_FILTER 16//链表的数据结构typedef struct tagList{TCHAR szFile[MAX_PATH];struct tagList *NextFile;}FileList, *PFileList;//主体类class CHunter{public:CHunter();~CHunter();void AddFilter( TCHAR *szFilter );//添加过滤器void CHunter::Hunt( TCHAR *szPath );TCHAR *GetFile();//取得链表中的文件DWORD GetFileCount();//取得文件的数量private:PFileList headNode;//链表头PFileList currNode;void AddFile( TCHAR *szFile );void HuntFile( char *lpPath ) ;TCHAR szFilter[CONST_MAX_FILTER][5] ;DWORD dwFilterCount ;DWORD dwFileCount ;};CHunter::CHunter():dwFilterCount(0),dwFileCount(0){headNode = (FileList *)malloc( sizeof(FileList));headNode->NextFile = NULL;currNode = headNode;for(int i=0; i< CONST_MAX_FILTER; i++)ZeroMemory( szFilter[i], 5 ) ;}CHunter::~CHunter(){PFileList next, tmp;tmp = headNode;while( tmp->NextFile != NULL ){next = tmp->NextFile ;free(tmp);tmp = next;}free(tmp);}//添加过滤器,比如。
c语言打开文件并查询文件内容的方法
c语言打开文件并查询文件内容的方法在C语言中,打开文件并查询文件内容是一项常见的任务。
本篇文章将详细介绍如何使用C语言打开文件并查询文件内容。
一、打开文件在C语言中,可以使用标准库函数fopen()来打开文件。
fopen()函数的第一个参数是文件路径和名称,第二个参数是打开文件的模式。
打开文件的模式可以包括读取("r")、写入("w")、追加("a")等。
以下是一个打开文件的示例代码:```cFILE *file = fopen("example.txt", "r");if (file == NULL) {printf("无法打开文件\n");return 1;}```在上面的代码中,我们尝试打开名为"example.txt"的文件,并以只读模式("r")打开它。
如果文件无法打开,我们将输出一条错误消息并返回1。
二、查询文件内容一旦文件被打开,我们可以使用fgetc()、fgets()、fread()等函数来查询文件内容。
这些函数将从文件中逐个字符或指定数量的字节读取数据。
以下是一个使用fgets()函数来查询文件内容的示例代码:```cchar buffer[1024];while (fgets(buffer, sizeof(buffer), file) != NULL) {printf("%s", buffer);}```在上面的代码中,我们使用fgets()函数从文件中读取指定数量的字符,并将其存储在缓冲区中。
然后,我们使用printf()函数将缓冲区中的内容打印到控制台上。
如果要查询整个文件的内容,可以使用循环来逐个字符地读取文件,直到到达文件的末尾。
三、关闭文件在完成对文件的操作后,应该使用fclose()函数关闭文件。
两种方法使用VC遍历文件夹下所有文件和文件夹
两种方法使用VC遍历文件夹下所有文件和文件夹1.使用网上最普通的方法find(char * lpPath){char szFind[MAX_PATH];WIN32_FIND_DATA FindFileData;strcpy(szFind,lpPath);strcat(szFind,"*.*");HANDLE hFind=::FindFirstFile(szFind,&FindFileData);if(INVALID_HANDLE_VALUE == hFind) return;while(TRUE){if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){if(FindFileData.cFileName[0]!='.'){strcpy(szFile,lpPath);strcat(szFile,"");strcat(szFile,FindFileData.cFileName);find(szFile);}}else{cout << FindFileData.cFileName;}if(!FindNextFile(hFind,&FindFileData)) break;}FindClose(hFind);}2.利用CFileFind类较简洁的实现该功能void CModelDlg::FindBmpFile(CString strFoldername){CString m_cstrFileList="";CFileFind tempFind;BOOL bFound; //判断是否成功找到文件bFound=tempFind.FindFile(strFoldername + "\\*.*"); /修改" "内内容给限定查找文件类型CString strTmp; //如果找到的是文件夹存放文件夹路径while(bFound) //遍历所有文件{bFound=tempFind.FindNextFile(); //第一次执行FindNextFile 是选择到第一个文件,以后执行为选择//到下一个文件if(!tempFind.IsDots()) continue; //如果找到的是返回上层的目录则结束本次查找if(tempFind.IsDirectory()) //找到的是文件夹,则遍历该文件夹下的文件{strTmp="";strTmp=tempFind.GetFilePath();FindFile(strTmp);}else{strTmp=tempFind.GetFileName(); //保存文件名,包括后缀名// 在此处添加对找到文件的处理}}tempFind.Close(); return;}。
c语言获取路径
c语言获取路径
获取路径是指在编程中,通过一定的方法获取文件或目录的路径。
在C语言中,可以使用一些库函数来实现路径的获取操作。
我们需要使用C语言中的标准输入输出库函数来获取用户输入的文件名或目录名。
可以使用scanf函数或fgets函数来获取用户输入的路径字符串。
接下来,我们需要使用C语言中的文件操作库函数来判断路径是否存在,并获取其绝对路径。
可以使用access函数来检查路径是否存在,使用realpath函数来获取路径的绝对路径。
在获取路径的过程中,我们需要注意一些异常情况的处理。
例如,用户输入的路径可能无效或不存在,我们需要给出相应的提示信息。
另外,路径字符串的长度可能超过我们预设的长度,我们需要进行适当的截断或错误处理。
通过以上的步骤,我们可以成功获取用户输入的路径,并进行相应的路径操作。
在路径操作的过程中,我们可以使用C语言中的字符串处理函数来对路径进行分割或拼接,以满足我们的需求。
通过合理运用C语言中的库函数和字符串处理函数,我们可以轻松地实现路径的获取操作。
这样,我们就可以方便地对文件或目录进行操作,为我们的编程工作带来了很大的便利。
希望本文对您有所帮助!。
c 遍历文件夹下所有文件的多种方法
c 遍历文件夹下所有文件的多种方法在C语言中,遍历文件夹下所有文件有多种方法,以下是其中几种常见的方法:1. 使用操作系统提供的API大多数操作系统都提供了遍历文件夹的API,例如Windows平台的FindFirstFile和FindNextFile函数,Linux平台的opendir和readdir函数等。
这些API可以遍历文件夹下的所有文件和子文件夹,并返回文件的信息。
以下是一个使用Linux平台opendir和readdir函数的示例代码:```cinclude <>include <>int main() {DIR dir;struct dirent ent;char path[1035];// 打开当前目录dir = opendir(".");if (dir != NULL) {// 遍历目录下的所有文件和子文件夹 while ((ent = readdir(dir)) != NULL) { printf("%s\n", ent->d_name);}closedir(dir);} else {// 打开目录失败perror("");return 1;}return 0;}```2. 使用第三方库除了操作系统提供的API外,还有一些第三方库可以方便地遍历文件夹下的所有文件,例如GLib库中的g_directory_list_all函数。
这些库通常提供了更高级的遍历功能,例如支持递归遍历子文件夹、过滤特定类型的文件等。
3. 使用命令行工具的输出除了编程方式外,还可以使用命令行工具来遍历文件夹下的所有文件,例如Windows平台的dir命令和Linux平台的ls命令。
这些命令可以输出文件夹下的所有文件和子文件夹,并将结果输出到标准输出流中。
可以将命令的输出通过管道传递给C程序的标准输入流中,然后使用C语言的输入输出函数来解析输出结果。
C++利用_findfirst与_findnext查找文件的方法
C++利⽤_findfirst与_findnext查找⽂件的⽅法C++ ⽂件查找在C++中我们要如何查找⽂件呢?我们需要⼀个结构体和⼏个⼤家可能不太熟悉的函数。
这些函数和结构体在的头⽂件中,结构体为struct _finddata_t ,函数为_findfirst、_findnext和_fineclose。
具体如何使⽤,下⾯来⼀起看看吧_findfirst与_findnext查找⽂件⼀、这两个函数均在io.h⾥⾯。
⼆、⾸先了解⼀下⼀个⽂件结构体:struct _finddata_t {unsigned attrib;time_t time_create;time_t time_access;time_t time_write;_fsize_t size;char name[260];};time_t,其实就是long⽽_fsize_t,就是unsigned long现在来解释⼀下结构体的数据成员吧。
attrib,就是所查找⽂件的属性:_A_ARCH(存档)、_A_HIDDEN(隐藏)、_A_NORMAL(正常)、_A_RDONLY(只读)、 _A_SUBDIR(⽂件夹)、_A_SYSTEM(系统)。
time_create、time_access和time_write分别是创建⽂件的时间、最后⼀次访问⽂件的时间和⽂件最后被修改的时间。
size:⽂件⼤⼩name:⽂件名。
三、⽤ _findfirst 和 _findnext 查找⽂件1、_findfirst函数:long _findfirst(const char *, struct _finddata_t *);第⼀个参数为⽂件名,可以⽤"*.*"来查找所有⽂件,也可以⽤"*.cpp"来查找.cpp⽂件。
第⼆个参数是_finddata_t结构体指针。
若查找成功,返回⽂件句柄,若失败,返回-1。
2、_findnext函数:int _findnext(long, struct _finddata_t *);第⼀个参数为⽂件句柄,第⼆个参数同样为_finddata_t结构体指针。
LinuxC:从路径中提取目录名和文件名
LinuxC:从路径中提取⽬录名和⽂件名今天⽆意中发现了两个函数,可以⽅便的从给定的路径中提取⽬录名和⽂件名。
以前介绍过⽤strrchr()函数去做的⽅式()。
不多废话,就是下⾯这两个函数:bool generate_transfer_file(const uint8_t *audio_header, const char *transcode_file_path) {if (!audio_header) {ALOGE("input <audio_header> can not be null");return false;}if (!transcode_file_path) {ALOGE("input <transcode_file_path> can not be null");return false;}FILE *transcode_file = fopen(transcode_file_path, "rb");if (!transcode_file) {ALOGE("open transcode file failed");return false;}char *dir_name = dirname(transcode_file_path);char *file_name = __posix_basename(transcode_file_path);ALOGI("dir: %s, file name: %s", dir_name, file_name);return true;}⽐如输⼊的路径是:/storage/emulated/0/Android/data/mon.media/files/dest.aac, 可以输出:dir: /storage/emulated/0/Android/data/mon.media/files, file name: dest.aac我是在android的环境下测试的,linux的话可能没有__posix_basename()函数,可以找找basename()函数。
C#读取指定文件夹中的所有文件
C#读取指定文件夹中的所有文件
======================================
=============================
如何获取指定目录包含的文件和子目录
1. DirectoryInfo.GetFiles():获取目录中(不包含子目录)的文件,返回类型为FileInfo[],支持通配符查找;
2. DirectoryInfo.GetDirectories():获取目录(不包含子目录)的子目录,返回类型为DirectoryInfo[],支持通配符查找;
3. DirectoryInfo. GetFileSystemInfos():获取指定目录下(不包含子目录)的文件和子目录,返回类型为FileSystemInfo[],支持通配符查找;
如何获取指定文件的基本信息;
FileInfo.Exists:获取指定文件是否存在;
,FileInfo.Extensioin:获取文件的名称和扩展名;
FileInfo.FullName:获取文件的全限定名称(完整路径);
FileInfo.Directory:获取文件所在目录,返回类型为DirectoryInfo;
FileInfo.DirectoryName:获取文件所在目录的路径(完整路径);
FileInfo.Length:获取文件的大小(字节数);
FileInfo.IsReadOnly:获取文件是否只读;
FileInfo.Attributes:获取或设置指定文件的属性,返回类型为FileAttributes枚举,可以是多个值的组合
FileInfo.CreationTime、stAccessTime、stWriteTime:分别用于获取文件的创建时间、访问时间、修改时间;。
C#路径中获取文件全路径、目录、扩展名、文件名称常用函数
C#路径中获取⽂件全路径、⽬录、扩展名、⽂件名称常⽤函数C#路径中获取⽂件全路径、⽬录、扩展名、⽂件名称常⽤函数需要引⽤System.IO 直接可以调⽤Path的静态⽅法1class Program2 {3static void Main(string[] args)4 {56//获取当前运⾏程序的⽬录7string fileDir = Environment.CurrentDirectory;8 Console.WriteLine("当前程序⽬录:"+fileDir);910//⼀个⽂件⽬录11string filePath = "C:\\JiYF\\BenXH\\BenXHCMS.xml";12 Console.WriteLine("该⽂件的⽬录:"+filePath);1314string str = "获取⽂件的全路径:" + Path.GetFullPath(filePath); //-->C:\JiYF\BenXH\BenXHCMS.xml15 Console.WriteLine(str);16 str = "获取⽂件所在的⽬录:" + Path.GetDirectoryName(filePath); //-->C:\JiYF\BenXH17 Console.WriteLine(str);18 str = "获取⽂件的名称含有后缀:" + Path.GetFileName(filePath); //-->BenXHCMS.xml19 Console.WriteLine(str);20 str = "获取⽂件的名称没有后缀:" + Path.GetFileNameWithoutExtension(filePath); //-->BenXHCMS21 Console.WriteLine(str);22 str = "获取路径的后缀扩展名称:" + Path.GetExtension(filePath); //-->.xml23 Console.WriteLine(str);24 str = "获取路径的根⽬录:" + Path.GetPathRoot(filePath); //-->C:\25 Console.WriteLine(str);26 Console.ReadKey();2728 }29 }程序在桌⾯运⾏Path类介绍1#region程序集 mscorlib.dll, v4.0.0.02// C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\mscorlib.dll3#endregion45using System;6using System.Runtime.InteropServices;7using System.Security;8using System.Text;910namespace System.IO11 {12// 摘要:13// 对包含⽂件或⽬录路径信息的 System.String 实例执⾏操作。
C#获取文件路径或者文件夹路径的方法
C#获取⽂件路径或者⽂件夹路径的⽅法⼀、获取当前⽂件路径1.System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName获取模块的完整路径,包括⽂件名。
获取得到的是Module的⽂件名,如果在VS2008的调试环境中,获取的是 [程序名].vshost.exe的完整⽂件名。
例如:System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName = C:\Users\zhzhx\Documents\Visual Studio2010\Projects\WindowsFormsApplication1\WindowsFormsApplication1\bin\Debug\WindowsFormsApplication1.vshost.exe(本例包括以下各个⽰例均为在本⼈电脑下操作得到,其中C:\\Users\\zhzhx\\Documents为“我的⽂档”⽂件夹)2.System.Environment.CurrentDirectory获取和设置当前⽬录(该进程从中启动的⽬录)的完全限定⽬录。
例如:System.Environment.CurrentDirectory = C:\Users\zhzhx\Documents\Visual Studio2010\Projects\WindowsFormsApplication1\WindowsFormsApplication1\bin\Debug3.System.IO.Directory.GetCurrentDirectory()获取应⽤程序的当前⼯作⽬录。
例如:System.IO.Directory.GetCurrentDirectory() = C:\Users\zhzhx\Documents\Visual Studio2010\Projects\WindowsFormsApplication1\WindowsFormsApplication1\bin\Debug其中,2和3这两个⽅法获得的路径是⼀样的,获得的是当前路径,这个路径不⼀定是程序所在的路径。
使用Windows CMD命令行进行文件搜索和查找的方法
使用Windows CMD命令行进行文件搜索和查找的方法在日常使用电脑的过程中,我们经常需要查找和搜索文件。
虽然现在有许多图形化界面的文件搜索工具,但是对于一些喜欢使用命令行的用户来说,使用Windows CMD命令行进行文件搜索和查找也是一种高效的方式。
本文将介绍一些常用的Windows CMD命令行进行文件搜索和查找的方法。
第一种方法是使用dir命令。
dir命令是Windows命令行中最常用的命令之一,它可以列出指定目录下的所有文件和文件夹。
通过结合一些参数,我们可以实现文件搜索和查找的功能。
例如,要在C盘下搜索所有扩展名为.txt的文件,可以使用以下命令:dir C:\*.txt /s其中,C:\表示要搜索的目录,*.txt表示要搜索的文件扩展名,/s表示搜索子目录。
这样,命令行会列出所有C盘下扩展名为.txt的文件的路径。
第二种方法是使用findstr命令。
findstr命令是Windows命令行中用于字符串搜索的命令,它也可以用于文件搜索。
例如,要在C盘下搜索包含特定字符串的文件,可以使用以下命令:dir C:\ /s /b | findstr "keyword"其中,C:\表示要搜索的目录,/s表示搜索子目录,/b表示只显示文件路径,"keyword"表示要搜索的关键字。
这样,命令行会列出所有包含关键字的文件的路径。
第三种方法是使用where命令。
where命令是Windows命令行中用于搜索可执行文件的命令,但是它也可以用于搜索其他类型的文件。
例如,要在C盘下搜索所有扩展名为.txt的文件,可以使用以下命令:where /r C:\ *.txt其中,/r表示搜索子目录,C:\表示要搜索的目录,*.txt表示要搜索的文件扩展名。
这样,命令行会列出所有C盘下扩展名为.txt的文件的路径。
除了以上介绍的三种方法,还有许多其他的命令行工具可以用于文件搜索和查找,例如grep、find等。
C++查找文件
#include<io.h>1. char * filePath = "D:\\sample";1.vector<string> files;2.3.////获取该路径下的所有文件4.getFiles(filePath, files );5.6.char str[30];7.int size = files.size();8.for (int i = 0;i <size;i++)9.{10. cout<<files[i].c_str()<<endl;11.}1.void getFiles( string path, vector<string>& files )2.{3. //文件句柄4. long hFile = 0;5. //文件信息6. struct _finddata_t fileinfo;7. string p;8. if((hFile = _findfirst(p.assign(path).append("\\*").c_str(),&fileinfo)) != -1)9. {10. do11. {12. //如果是目录,迭代之13. //如果不是,加入列表14. if((fileinfo.attrib & _A_SUBDIR))15. {16. if(strcmp(,".") != 0 && strcmp(,"..") != 0)17. getFiles( p.assign(path).append("\\").append(), files );18. }19. else20. {21. files.push_back(p.assign(path).append("\\").append() );22. }23. }while(_findnext(hFile, &fileinfo) == 0);24. _findclose(hFile);25. }26.}_finddata_t 的使用那么到底如何查找文件呢?我们需要一个结构体和几个大家可能不太熟悉的函数。
如何用C#代码查找某个路径下是否包含某个文件
如何⽤C#代码查找某个路径下是否包含某个⽂件?1string path = 'f:\\哈哈'; if (Directory.Exists(path)) { MessageBox.Show('存在⽂件夹'); stringfilename = path+'\\'+'CeShi.xml';//⼀定要在路径和⽂件名之间加 \\ if (File.Exists(filename)) { MessageBox.Show('⽂件存在'); } else { MessageBox.Show('不存在⽂件');File.Create(filename);//创建⽂件 } } else { MessageBox.Show('不存在⽂件夹');Directory.CreateDirectory(path);//创建路径 }以下是代码⽚段可以⾃由组合:01 //判断⽂件夹的存在、创建、删除⽂件夹02 string path = 'F:\\haha';//路径的正确写法03 if (Directory.Exists(path))//如果不存在就创建file⽂件夹04 { 05 MessageBox.Show('存在⽂件夹'); 06 //Directory.Delete(path, false);//如果⽂件夹中有⽂件或⽬录,此处会报错 07 //Directory.Delete(path, true);//true代表删除⽂件夹及其⾥⾯的⼦⽬录和⽂件08 }09 else10 { 11 MessageBox.Show('不存在⽂件夹'); 12 Directory.CreateDirectory(path);//创建该⽂件夹13 }1415 //判断⽂件的存在、创建、删除⽂件16 string filename = path +'\\'+ '11.txt';17 if (File.Exists(filename))18 { 19 MessageBox.Show('存在⽂件'); 20 File.Delete(filename);//删除该⽂件21 }22 else23 { 24 MessageBox.Show('不存在⽂件'); 25 File.Create(filename);//创建该⽂件,如果路径⽂件夹不存在,则报错。
C#文件查找(按内容、文件名称查找)
using System;using System.Collections;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.IO;using System.Text;using System.Windows.Forms;namespace Search{public partial class Form1 : Form{public Form1(){InitializeComponent();}#region函数///<summary>///选中的文件夹///</summary>private DirectoryInfo _dirSelected;///<summary>///检索关键字///</summary>private string _strKeyWord;///<summary>///存储文件的DataTable///</summary>private DataTable _dtFileInfo;///<summary>///可查找的后缀名///</summary>private Hashtable _htExtension;///<summary>///检索方式:1 按内容检索 2按文件名称检索///</summary>private int _iQueryType = 1;private bool _bFlagRunCompleted = true;///<summary>///是否区分大小写///</summary>private bool _bFlagIsUpLower = true;private const int _GB = 1024 * 1024 * 1024;//定义GB的计算常量private const int _MB = 1024 * 1024;//定义MB的计算常量private const int _KB = 1024;//定义KB的计算常量private delegate void dlgShowSearchFileName(string strMsg);private delegate void dlglBindDataTableToDataGridView();#endregion#region方法#region跨线程访问控件///<summary>///跨线程访问控件:显示检索文件名///</summary>///<param name="strMsg"></param>private void AccessToControl_ShowSearchFileName(string strMsg){if (this.InvokeRequired){dlgShowSearchFileName dlgShowMsg = newdlgShowSearchFileName(AccessToControl_ShowSearchFileName);this.lblSearchMsg.Invoke(dlgShowMsg, new object[] { strMsg }); }else{this.lblSearchMsg.Text = string.Format("正在检索 {0}", strMsg); }}private void AccessToControl_BindDataTableToDataGridView(){this.Invoke(new dlglBindDataTableToDataGridView(delegate(){this.dataGridView1.DataSource = null;this.dataGridView1.DataSource = this._dtFileInfo;}));}#endregion#region搜索///<summary>///检索///</summary>private void Search(){ArrayList alFile = new ArrayList();SearchFiles(this._dirSelected, ref alFile);}///<summary>///遍历文件夹下的所有文件///</summary>///<param name="info"></param>///<param name="alFileInfo"></param>private void SearchFiles(FileSystemInfo info, ref ArrayList alFileInfo) {if (!this._bFlagRunCompleted){if (!info.Exists) return;DirectoryInfo dir = info as DirectoryInfo;if (dir == null) return;FileSystemInfo[] files = dir.GetFileSystemInfos();for (int i = 0; i < files.Length; i++){if (!this._bFlagRunCompleted){FileInfo file = files[i] as FileInfo;if (file != null){AccessToControl_ShowSearchFileName(file.FullName);//显示检索信息string strKeyWordTmp = this._strKeyWord;if (this._iQueryType == 1)//按照文件内容检索{if (this._htExtension.ContainsValue(file.Extension)){try{StreamReader sr = new StreamReader(file.FullName);string strContent = sr.ReadToEnd();int iRowNumber = 0;string strContentTmp = strContent;if (!this._bFlagIsUpLower){strContentTmp = strContent.ToUpper();strKeyWordTmp = this._strKeyWord.ToUpper();}iRowNumber = GetFindTextLine(strContentTmp, strKeyWordTmp, 0);if (iRowNumber > 0){//添加到表格AddToDataGridView(file, iRowNumber);alFileInfo.Add(file);}else{continue;}}catch{continue;}}else{continue;}}else{string strFileName = ;if (!this._bFlagIsUpLower){strKeyWordTmp = this._strKeyWord.ToUpper();strFileName = strFileName.ToUpper();}if (strFileName.IndexOf(strKeyWordTmp) > 0){//添加到表格AddToDataGridView(file, 0);alFileInfo.Add(file);}else{continue;}}}else{SearchFiles(files[i], ref alFileInfo);}}else{return;}}}else{return;}}#endregion#region其他///<summary>///查找字符串在原字符串中出现的行数///</summary>///<param name="content"></param>///<param name="findText"></param>///<param name="startIndex"></param>///<returns></returns>public int GetFindTextLine(string content, string findText, int startIndex) {//标准化参数string text1 = content.Replace("\r\n", "\r");findText = findText.Replace("\r\n", "\r");if (startIndex < 0){startIndex = 0;}string[] t1 = text1.Split('\r');int count = t1.Length;int len = findText.Split('\r').Length;int intStartIndex = startIndex;StringBuilder strb = new StringBuilder();for (int i = 0; i < count; i++){int t_i = 0;for (int j = 0; j < len; j++){if (j > 0){strb.Append("\r");}t_i = i + j;if (t_i < count){strb.Append(t1[i + j]);}}//查找是否相等intStartIndex = strb.ToString().IndexOf(findText, 0);if (intStartIndex > -1){return i + 1;}strb.Remove(0, strb.Length);}return 0;}private void AddToDataGridView(FileInfo fileInfo, int iRowNumber){if (this._dtFileInfo == null){this._dtFileInfo = new DataTable();this._dtFileInfo.Columns.Add("文件名", typeof(string));this._dtFileInfo.Columns.Add("路径", typeof(string));this._dtFileInfo.Columns.Add("扩展名", typeof(string));this._dtFileInfo.Columns.Add("行号", typeof(int));this._dtFileInfo.Columns.Add("文件大小", typeof(string));this._dtFileInfo.Columns.Add("创建日期", typeof(string));this._dtFileInfo.Columns.Add("最后访问日期", typeof(string));this._dtFileInfo.Columns.Add("最后修改日期", typeof(string));}string strFileName = ;string strPath = Path.GetFullPath(fileInfo.FullName);string strExtension = fileInfo.Extension;string strFileSize = ByteConversionGBMBKB(fileInfo.Length);string strCreateDate = fileInfo.CreationTime.ToString("yyyy-MM-dd HH:mm:ss");string strLastAccessDate = stAccessTime.ToString("yyyy-MM-dd HH:mm:ss");string strLastWriteDate = stWriteTime.ToString("yyyy-MM-dd HH:mm:ss");DataRow dr = this._dtFileInfo.NewRow();dr[0] = strFileName;dr[1] = strPath;dr[2] = strExtension;dr[3] = iRowNumber;dr[4] = strFileSize;dr[5] = strCreateDate;dr[6] = strLastAccessDate;dr[7] = strLastWriteDate;this._dtFileInfo.Rows.Add(dr);AccessToControl_BindDataTableToDataGridView();}///<summary>///字节转换///</summary>///<param name="KSize"></param>///<returns></returns>public string ByteConversionGBMBKB(Int64 KSize){if (KSize / _GB >= 1)//如果当前Byte的值大于等于1GBreturn (Math.Round(KSize / (float)_GB, 2)).ToString() + "GB";//将其转换成GB else if (KSize / _MB >= 1)//如果当前Byte的值大于等于1MBreturn (Math.Round(KSize / (float)_MB, 2)).ToString() + "MB";//将其转换成MB else if (KSize / _KB >= 1)//如果当前Byte的值大于等于1KBreturn (Math.Round(KSize / (float)_KB, 2)).ToString() + "KB";//将其转换成KGB elsereturn KSize.ToString() + "Byte";//显示Byte值}private void SetControlEnable(bool bFlag){this.txtKeyWord.ReadOnly = bFlag;this.txtSearchDir.ReadOnly = bFlag;this.btnSelectDir.Enabled = !bFlag;this.btnSearch.Enabled = !bFlag;this.btnStopSearch.Enabled = bFlag;}private void InitExtension(){if (this._htExtension == null){this._htExtension = new Hashtable();}this._htExtension.Add("txt", ".txt");this._htExtension.Add("ini", ".ini");this._htExtension.Add("php", ".php");this._htExtension.Add("html", ".html");this._htExtension.Add("htm", ".htm");this._htExtension.Add("asp", ".asp");this._htExtension.Add("cs", ".cs");}#endregion#endregion#region事件private void btnSelectDir_Click(object sender, EventArgs e){this.folderBrowserDialog1.RootFolder = Environment.SpecialFolder.Desktop;this.folderBrowserDialog1.SelectedPath =Environment.GetFolderPath(Environment.SpecialFolder.Desktop);if (this.folderBrowserDialog1.ShowDialog() == DialogResult.OK){this._dirSelected = new DirectoryInfo(this.folderBrowserDialog1.SelectedPath);this.txtSearchDir.Text = this._dirSelected.ToString();}}private void Form1_Load(object sender, EventArgs e){InitExtension();this.cmbQueryType.Text = this.cmbQueryType.Items[0].ToString();BeginInvoke((MethodInvoker)delegate { txtKeyWord.Focus(); });}private void btnSearch_Click(object sender, EventArgs e){if (this.txtKeyWord.Text.Trim() == ""){MessageBox.Show("检索关键字不能为空!");this.txtKeyWord.Focus();return;}else{this._strKeyWord = this.txtKeyWord.Text.Trim();}if (this._dirSelected == null){MessageBox.Show("检索目录未选择!");this.btnSelectDir.Focus();return;}if (this.cmbQueryType.Text.Trim() == ""){MessageBox.Show("检索方式未选择!");this.cmbQueryType.Focus();return;}else{if (this.cmbQueryType.Text.Trim() == "按文件内容检索"){this._iQueryType = 1;}else if (this.cmbQueryType.Text.Trim() == "按文件名称检索"){this._iQueryType = 2;}}if (this.cbIsUpLow.Checked){this._bFlagIsUpLower = true;}else{this._bFlagIsUpLower = false;}this.dataGridView1.DataSource = null;this._dtFileInfo = null;SetControlEnable(true);_bFlagRunCompleted = false;this.backgroundWorker1.RunWorkerAsync();}private void btnStopSearch_Click(object sender, EventArgs e){this.backgroundWorker1.CancelAsync();_bFlagRunCompleted = true;SetControlEnable(false);this.lblSearchMsg.Text = "";}private void dataGridView1_DoubleClick(object sender, EventArgs e){if (this.dataGridView1.DataSource != null && this.dataGridView1.Rows.Count > 0) {string strPath = this.dataGridView1.CurrentRow.Cells[1].Value.ToString();string strApplicationPath = string.Format("{0}/Notepad2.exe",Application.StartupPath);System.Diagnostics.Process.Start(strApplicationPath, strPath);}}private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e){Search();}private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e){SetControlEnable(false);this.lblSearchMsg.Text = "";this.txtSearchDir.SelectAll();this.txtSearchDir.Focus();}private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e){if (this.dataGridView1.DataSource != null && this.dataGridView1.Rows.Count > 0) {for (int i = 0; i < this.dataGridView1.Rows.Count; i++){this.dataGridView1.Rows[i].HeaderCell.Value = (i + 1).ToString();}}}#endregion}}。
C++实现(,)查找一个目录,返回所有文件名(,)并且返回对应行数
本文件包含两部分内容:(1)显示一个文件夹总每个二进制文件或文本文件的的路径(包含文件名)和行数(2)WIN32_FIND_DA TA结构详解(1)源程序.h头文件:fun.h#undef UNICODE#define MAX_RESULT 256#include <cstdlib>#include <Windows.h>#include<cstring>#include<iostream>#include<string>#include<fstream>using namespace std;char directory[MAX_PATH];const string note="//";/**************************************************************** function for search all the files in a directory and return the namesof all files,which is stored bye using the two-level pointer****************************************************************/char** EnumFiles(const char *directory, int *count){WIN32_FIND_DA TA FindFileData;HANDLE hFind;char result[MAX_RESULT][MAX_PATH];char **returnresult;char pattern[MAX_PATH];int i = 0, j;// 开始查找strcpy(pattern, directory);strcat(pattern, "\\*.txt"); //查找txt类型文件.h,.cpp等所有的二进制文件或者文本文件hFind = FindFirstFile(pattern, &FindFileData);if (hFind == INV ALID_HANDLE_V ALUE){*count = 0;return NULL;}else{do{strcpy(result[i],directory);strcat(result[i],"\\");strcat(result[i],FindFileData.cFileName);i++;}while (FindNextFile(hFind, &FindFileData) != 0); }// 查找结束FindClose(hFind);// 复制到结果中returnresult = new char*[i];for (j = 0; j < i; j++){returnresult[j] = new char[strlen(result[j])+1];strcpy(returnresult[j], result[j]);}*count = i;return returnresult;}/**************************************************************** funtion for counting lines in each file,the invalid lines includingthe following 4 cases:(1)the emptyline which only contains a 'return' character(2)the lines which start with a note---"--"(3)the lines which are full of blanks(4)the lines which start with the " --"****************************************************************/void linecounts(char *files,int *eachline){ifstream inFile;static int fileth=0;string s;char c=' ';int i,firstnote;int lines=0;int emptyline=0; //the tag for invalid line,0--false,1--true inFile.open(files);while(!inFile.eof()){if(!s.length()) emptyline=1; //judge whether it is an emptylineif(!emptyline) //judge whether it is full of blanks {for(i=0;i<s.length();i++)if(s[i]!=c)break;if(i==s.length()) emptyline=1;}if(!emptyline) //judge whether it is a note line {firstnote=s.find(note);if(!firstnote||(firstnote==i))emptyline=1;}if(!emptyline)lines++;}eachline[fileth]=lines;fileth++;}源文件:#include"func.h"void main(){int i, count;char ** result;int *eachline;cout<<"请输入要查询的文件夹:\n"; cin>>directory;result = EnumFiles(directory, &count); cout<<count<<endl;eachline=new int[count];cout<<"the following is the lines of each file in this directory\n";cout<<"filename totallines\n";for (i = 0; i < count; i++){linecounts(result[i],eachline);cout<<result[i]<<" "<<eachline[i]<<endl;}delete []result;delete []eachline;}以下是查找文件目录:e:\myproject\fileuse下的所有.cpp文件,并返回每个.CPP文件的行数结果截图:WIN32_FIND_DA TA结构描述了一个由FindFirstFile, FindFirstFileEx, 或FindNextFile函数查找到的文件信息,typedef struct _WIN32_FIND_DA TA {DWORD dwFileAttributes; //文件属性FILETIME ftCreationTime; // 文件创建时间FILETIME ftLastAccessTime; // 文件最后一次访问时间FILETIME ftLastWriteTime; // 文件最后一次修改时间DWORD nFileSizeHigh; // 文件长度高32位DWORD nFileSizeLow; // 文件长度低32位DWORD dwReserved0; // 系统保留DWORD dwReserved1; // 系统保留TCHAR cFileName[ MAX_PATH ]; // 长文件名TCHAR cAlternateFileName[ 14 ]; // 8.3格式文件名} WIN32_FIND_DATA, *PWIN32_FIND_DA TA;可以通过FindFirstFile()函数根据当前的文件存放路径查找该文件来把待操作文件的相关属性读取到WIN32_FIND_DA TA结构中去:WIN32_FIND_DA TA ffd ;HANDLE hFind = FindFirstFile("c:\\test.dat",&ffd);在使用这个结构时不能手工修改这个结构中的任何数据,结构对于开发人员来说只能作为一个只读数据,其所有的成员变量都会由系统完成填写。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
++count;
}
else if(attr==33&&((f.ff_attrib&(1<<0))||(f.ff_ attrib&(1<<5))))
{
PRF(" Creat export file error!\n");
return;
}
write=1; /*是否导出结果到文件中*/
}
else if(argc==4) /*参数指定错误*/
{
PRF(" Para Error!\n");
return;
else /*如果是2级以上目录则进行另外一种算法*/
{
while((*p) != '\\')
p--;
*p='\0'; /*在指针指向str_1的地方重新赋值*/
}
strcpy(buffer,str_1);
chdir(buffer);/*更改工作目录*/
#include<malloc.h>
#include<stdlib.h>
#define PRF printf
int level=0,flag=1,dirs=0,over=0;/*当前目录的深度为0*/
struct ffblk d[10]; /*定义10级目录的深度*/
done=findfirst("*",&d[level],31);
else
done=findnext(&d[level]);
while(!done)
{
if((d[level].ff_attrib&(1<<4))==16)/*如果是目录,注1*/
chdir(buffer);
getcwd(buffer,MAXPATH);
}
fclose(fp);
if(!find)
PRF("There are no files accroding to you conditions!\n");
else if(!write)
PRF("\nFind over!\n");
if(level>0)-
-level;
if(level==0&&dirs>0)--dirs;
if(level==0&&dirs==0) /*如果在深度为0的目录中搜索完毕,则退出*/
fclose(fp1);
PRF("Export to \"%s\" successfully!\n",argv[argc-1]);
}
}
void main(int argc,char *argv[])
{
int done;
if(argc<2||argc>4)
done=findfirst(argv[1],&f,31);
while(!done)
{
find=1; /*如果有符合条件的文件则置find为1*/
if(fp1==NULL&&wherey()==25)
{
PRF("------more------");
p=str_1+n-1; /*使指针指向字符串的最后一个字符*/
for(i=0;i<n;i++) /*计算路径中共有多少\,也即是几级目录*/
if(str_1=='\\')
++m;
if(m==1)/*如果是第二级目录则将盘符后第三个赋为结束符*/
str_1[3]='\0';
attr=31;
else if(!strcmp(argv[2],"-o")||!strcmp(argv[2],"-O"))
attr=33;
else if(argc==3) /*没有指定参数*/
{
if((fp1=fopen(argv[2],"w+"))==NULL)
getch();
clrscr();
}
if(attr==31)
{
(!write)?PRF("%-15s%s\n",f.ff_name,buffer):
fprintf(fp1,"%-15s%s\n",f.ff_name,buffer);
++c
{
(!write)?PRF("%-15s%s\n",f.ff_name,buffer):
fprintf(fp1,"%-15s%s\n",f.ff_name,buffer);
++count;
}
done=findnext(&f);
}
strcpy(buffer,buf_tmp);/*返回到最开始的目录*/
char buffer[MAXPATH];
FILE *fp;
void cd(char *direc)/*进入选定目录*/
{
struct ffblk f;
int done;
done=findfirst(direc,&f,31);
do
{
if((f.ff_attrib&(1<<4))!=16) /*找不到目录*/
++dirs;
done=findnext(&f);
}
fp=fopen("dirs.tmp","w+");
fprintf(fp,"%s\n",buffer); /*输入当前目录*/
printf("Creating directories list now,please wait------\n");
chdir(buffer);
getcwd(buffer,MAXPATH);
}
void cdup()/*返回到上层目录*/
{
char str_1[MAXPATH], *p;
int n,m=0,i;
strcpy(str_1,buffer);
n=strlen(str_1); /*n存储工作目录buffer字符串的长度*/
ount;
}
else if(attr==2&&(f.ff_attrib&(1<<1)))
{
(!write)?PRF("%-15s%s\n",f.ff_name,buffer):
fprintf(fp,"%s\n",d[level].ff_name);
cd(d[level].ff_name);
flag=1;
++level;
Creat_List();
}
done=findnext(&d[level]);
}
cdup();
flag=0;
#include<stdio.h>
#include<dir.h>
#include<string.h>
#include<conio.h>
#include<dos.h>
#include<io.h>
#include<process.h>
if(strcmp(d[level].ff_name,".")!=0&&strcmp(d[level].ff_name,"..")!=0)
{
for(i=0;i<level;i++)
fprintf(fp,"%s\\",d.ff_name);
}
if(argc==4)
{
if((fp1=fopen(argv[3],"w+"))==NULL)
{