精华内容
下载资源
问答
  • Windows遍历文件夹

    2019-01-09 21:29:32
    最近在弄遍历文件夹的事情,也了解一些情况。 调用FindFirstFile的结果是文件夹 "." 第一次调用FindNextFile的结果是文件夹 ".."   type LPSTR is access all String; type LPSTR_...

    最近在弄遍历文件夹的事情,也了解一些情况。

    调用FindFirstFile的结果是文件夹    "."

    第一次调用FindNextFile的结果是文件夹   ".."

     

       
       type LPSTR is access all String;
       type LPSTR_ARRAY is array(Natural range<>) of LPSTR;
       type PPSTRS is access all LPSTR_ARRAY;
    
       function GetFileName(s:String) return String is
       begin
          for i in s'Range loop
             if s(i)=Character'First then
                return s(s'First..i-1);
             end if;
          end loop;
          return s;
       end GetFileName;
    
       subtype FILETIME is QWord;
       type WIN32_FIND_DATAA is record
          FileAttributes     : DWORD;
          CreationTime       : FILETIME;
          LastAccessTime     : FILETIME;
          LastWriteTime      : FILETIME;
          FileSize           : QWORD:=0;
          Reserved0          : QWORD;
          FileName           : String (1 .. 260);
          AlternateFileName  : String (1 .. 14);
       end record with Pack;
       type lpWIN32_FIND_DATAA is access all WIN32_FIND_DATAA;
       
       function FindFirstFile(Path:String;pf:access WIN32_FIND_DATAA) return int with Import,Convention=>Stdcall,external_Name=>"FindFirstFileA";
       function FindNextFile(h:int;pf:access WIN32_FIND_DATAA) return int with Import,Convention=>Stdcall,external_name=>"FindNextFileA";
       function FindClose (hFindFile : int) return int with Import,Convention=>Stdcall,external_name=>"FindClose";
       
       
       function GetFileName(s:String) return String is
       begin
          for i in s'Range loop
             if s(i)=Character'First then
                return s(s'First..i-1);
             end if;
          end loop;
          return s;
       end GetFileName;
       
       --
       -- 获取目录中的子目录与文件
       --
       function GetDirFiles(s:String) return PPSTRS is
       begin
          if not IsExist(s) then
             return null;
          end if;
          
          declare
             fs:PPSTRS:=null;
             num:int:=0;
             handle:int;
             fi:WIN32_FIND_DATAA;
          begin
             
             handle:=FindFirstFile(s&"/*.*"&Character'First,fi'Unrestricted_Access);
             
             if handle=-1 then 
                return null;
             end if;
             
             if FindNextFile(handle,fi'Unrestricted_Access) /= 0 then
                null;
             end if;
             
             -- 第一个文件是 "." 文件夹
             -- 第二个文件是 ".."文件夹
             
             while (FindNextFile(handle,fi'Unrestricted_Access) /= 0) loop
                num:=num+1;
             end loop;
             
             fs:=new LPSTR_Array(1..Num);
             Num:=0;
             
             handle:=FindFirstFile(s&"/*.*"&Character'First,fi'Unrestricted_Access);
             if FindNextFile(handle,fi'Unrestricted_Access) /= 0 then
                null;
             end if;
                      
             while (FindNextFile(handle,fi'Unrestricted_Access) /= 0) loop
                num:=num+1;
                -- debug
                -- Put_Line(fi.cFileName(1..260));
                -- Ada.Text_IO.Put_Line(fi.nFileSize'img);
                if (fi.dwFileAttributes and 16#10#) = 16#10# then 
                   fs(num):=new String'(GetFileName(fi.cFileName)&"/");
                else
                   fs(num):=new String'(GetFileName(fi.cFileName));
                end if;
             end loop;
             
             handle:=FindClose(handle);
             
             return fs;
             
          end;
          
       end GetDirFiles;

     

     

     

    展开全文
  • windows 遍历文件夹

    2017-08-01 16:55:56
    https://msdn.microsoft.com/en-us/library/windows/desktop/aa364229(v=vs.85).aspx#对于遍历文件夹我们需要下面的函数HANDLE WINAPI FindFirstFile( _In_ LPCTSTR lpFileName, _Out_ LPWIN32_

    下面是msdn 关于文件管理板块的链接
    https://msdn.microsoft.com/en-us/library/windows/desktop/aa364229(v=vs.85).aspx#

    对于遍历文件夹我们需要下面的函数

    HANDLE WINAPI FindFirstFile(
      _In_  LPCTSTR           lpFileName,
      _Out_ LPWIN32_FIND_DATA lpFindFileData
    );

    lpFileName
    需要的查找文件名或者目录。ANSI 版本最多支持MAX_PATH 长。Unicode 版本前面加上 “\?\”去掉限制(从 Windows 10, version 1607开始有方法可以让win32文件和目录方法不添加”\?\”前缀也能去掉限制,
    https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx)。

    该参数不能是nullptr,无效字符串(空的或者不是\0结尾的),反斜杠(/)结尾的字符串。但是可以使用可以使用通配符(*)。

    lpFindFileData
    一个指向WIN32_FIND_DATA 的指针。该机构存储这找到的文件或者文件夹信息

    返回值
    失败的话函数返回INVALID_HANDLE_VALUE 。可以通过GetLastError 获得更多信息

    注意:

    如果向访问一个目录(文件夹中的所有目录)我们可以使用通配符,如C:\Windows*

    如果想访问一个文件或者文件夹 可以这样使用C:\Windows千万不要加\不然会函数一定会失败。

    函数在遍历文件目录时,多线程的程序可能可能会在不停的添加和删除文件。所以函数不保证文件遍历的实时性

    如果32编写的程序在可能运行在64位系统,请在调用函数之前调用也写别的函数.如 Wow64DisableWow64FsRedirection

    如果路径是一个符号链接(symbolic link),lpFindFileData就是关于符号链接的信息

    函数返回一个可以给FindNextFile 使用的句柄,在不需要时情调用 FindClose来释放而不是CloseHandle.

    案例

    #include <windows.h>
    #include <tchar.h> 
    #include <stdio.h>
    #include <strsafe.h>
    #pragma comment(lib, "User32.lib")
    
    void DisplayErrorBox(LPTSTR lpszFunction);
    
    int _tmain(int argc, TCHAR *argv[])
    {
       WIN32_FIND_DATA ffd;
       LARGE_INTEGER filesize;
       TCHAR szDir[MAX_PATH];
       size_t length_of_arg;
       HANDLE hFind = INVALID_HANDLE_VALUE;
       DWORD dwError=0;
    
       // If the directory is not specified as a command-line argument,
       // print usage.
    
       if(argc != 2)
       {
          _tprintf(TEXT("\nUsage: %s <directory name>\n"), argv[0]);
          return (-1);
       }
    
       // Check that the input path plus 3 is not longer than MAX_PATH.
       // Three characters are for the "\*" plus NULL appended below.
    
       StringCchLength(argv[1], MAX_PATH, &length_of_arg);
    
       if (length_of_arg > (MAX_PATH - 3))
       {
          _tprintf(TEXT("\nDirectory path is too long.\n"));
          return (-1);
       }
    
       _tprintf(TEXT("\nTarget directory is %s\n\n"), argv[1]);
    
       // Prepare string for use with FindFile functions.  First, copy the
       // string to a buffer, then append '\*' to the directory name.
    
       StringCchCopy(szDir, MAX_PATH, argv[1]);
       StringCchCat(szDir, MAX_PATH, TEXT("\\*"));
    
       // Find the first file in the directory.
    
       hFind = FindFirstFile(szDir, &ffd);
    
       if (INVALID_HANDLE_VALUE == hFind) 
       {
          DisplayErrorBox(TEXT("FindFirstFile"));
          return dwError;
       } 
    
       // List all the files in the directory with some info about them.
    
       do
       {
          if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
          {
             _tprintf(TEXT("  %s   <DIR>\n"), ffd.cFileName);
          }
          else
          {
             filesize.LowPart = ffd.nFileSizeLow;
             filesize.HighPart = ffd.nFileSizeHigh;
             _tprintf(TEXT("  %s   %ld bytes\n"), ffd.cFileName, filesize.QuadPart);
          }
       }
       while (FindNextFile(hFind, &ffd) != 0);
    
       dwError = GetLastError();
       if (dwError != ERROR_NO_MORE_FILES) 
       {
          DisplayErrorBox(TEXT("FindFirstFile"));
       }
    
       FindClose(hFind);
       return dwError;
    }
    
    
    void DisplayErrorBox(LPTSTR lpszFunction) 
    { 
        // Retrieve the system error message for the last-error code
    
        LPVOID lpMsgBuf;
        LPVOID lpDisplayBuf;
        DWORD dw = GetLastError(); 
    
        FormatMessage(
            FORMAT_MESSAGE_ALLOCATE_BUFFER | 
            FORMAT_MESSAGE_FROM_SYSTEM |
            FORMAT_MESSAGE_IGNORE_INSERTS,
            NULL,
            dw,
            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
            (LPTSTR) &lpMsgBuf,
            0, NULL );
    
        // Display the error message and clean up
    
        lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT, 
            (lstrlen((LPCTSTR)lpMsgBuf)+lstrlen((LPCTSTR)lpszFunction)+40)*sizeof(TCHAR)); 
        StringCchPrintf((LPTSTR)lpDisplayBuf, 
            LocalSize(lpDisplayBuf) / sizeof(TCHAR),
            TEXT("%s failed with error %d: %s"), 
            lpszFunction, dw, lpMsgBuf); 
        MessageBox(NULL, (LPCTSTR)lpDisplayBuf, TEXT("Error"), MB_OK); 
    
        LocalFree(lpMsgBuf);
        LocalFree(lpDisplayBuf);
    }
    
    展开全文
  • windows遍历文件夹

    2015-08-17 15:05:13
    #include <windows.h> #include typedef BOOL (WINAPI *EnumerateFunc) (LPCSTR lpFileOrPath, void* pUserData); void doFileEnumeration(LPSTR lpPath, BOOL bRecursion, BOOL bEnumFiles, ...
    #include <windows.h>
    #include <stdio.h>


    typedef BOOL (WINAPI *EnumerateFunc) (LPCSTR lpFileOrPath, void* pUserData);


    void doFileEnumeration(LPSTR lpPath, BOOL bRecursion, BOOL bEnumFiles, EnumerateFunc pFunc, void* pUserData)
    {


    static BOOL s_bUserBreak = FALSE;
    try{
    //-------------------------------------------------------------------------
    if(s_bUserBreak) return;


    int len = strlen(lpPath);
    if(lpPath==NULL || len<=0) return;


    //NotifySys(NRS_DO_EVENTS, 0,0);


    char path[MAX_PATH];
    strcpy(path, lpPath);
    if(lpPath[len-1] != '\\') strcat(path, "\\");
    strcat(path, "360*");


    WIN32_FIND_DATA fd;
    HANDLE hFindFile = FindFirstFile(path, &fd);
    if(hFindFile == INVALID_HANDLE_VALUE)
    {
    ::FindClose(hFindFile); return;
    }


    char tempPath[MAX_PATH]; BOOL bUserReture=TRUE; BOOL bIsDirectory;


    BOOL bFinish = FALSE;
    while(!bFinish)
    {
    strcpy(tempPath, lpPath);
    if(lpPath[len-1] != '\\') strcat(tempPath, "\\");
    strcat(tempPath, fd.cFileName);


    bIsDirectory = ((fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0);


    //如果是.或..
    if( bIsDirectory
    && (strcmp(fd.cFileName, ".")==0 || strcmp(fd.cFileName, "..")==0))
    {
    bFinish = (FindNextFile(hFindFile, &fd) == FALSE);
    continue;
    }


    if(pFunc && bEnumFiles!=bIsDirectory)
    {
    bUserReture = pFunc(tempPath, pUserData);
    if(bUserReture==FALSE)
    {
    s_bUserBreak = TRUE; ::FindClose(hFindFile); return;
    }
    }


    //NotifySys(NRS_DO_EVENTS, 0,0);


    if(bIsDirectory && bRecursion) //是子目录
    {
    doFileEnumeration(tempPath, bRecursion, bEnumFiles, pFunc, pUserData);
    }


    bFinish = (FindNextFile(hFindFile, &fd) == FALSE);
    }


    ::FindClose(hFindFile);


    //-------------------------------------------------------------------------
    }catch(...){ return; }
    }


    BOOL WINAPI myEnumerateFunc(LPCSTR lpFileOrPath, void* pUserData)
    {
    //char* pdot;
    //if((pdot = strrchr(lpFileOrPath, '.')) && stricmp(pdot, ".mp3") == 0)
    //{
    printf("%s\n", lpFileOrPath);
    //}
    return TRUE;
    }


    int main()
    {
    doFileEnumeration("E:\\360Chrome\\Chrome\\User Data\\Default", TRUE, TRUE, myEnumerateFunc, NULL);
    return 0;
    }
    展开全文
  • windows遍历文件夹代码

    2017-04-11 12:01:16
    #include #include #include #include using namespace std;...//遍历文件夹函数 void traverseFolder(char *pszDir, setstring> &fileSet) { WIN32_FIND_DATA fileData; HANDLE hFind = ::FindFirstFile(pszDir,
    #include<windows.h>
    #include<set>
    #include<string>
    #include<iostream>
    using namespace std;
    
    //遍历文件夹函数
    void traverseFolder(char *pszDir, set<string> &fileSet)
    {
        WIN32_FIND_DATA fileData;
    	
        HANDLE hFind = ::FindFirstFile(pszDir, &fileData);
        if (INVALID_HANDLE_VALUE == hFind) {
            return;
        }
    	
        while (TRUE) {
    		string filename(fileData.cFileName);
            fileSet.insert(filename);
            if (!::FindNextFile(hFind, &fileData)) {
                break;
            }
        }
    	
        ::FindClose(hFind);
    }
    
    
    int main()
    {
    	set<string> myFolder;
    	char *folderName = "D:\\doc\\*";//*是通配符
    	traverseFolder(folderName, myFolder);
    	
    	for(set<string>::iterator iter = myFolder.begin(); iter != myFolder.end(); ++iter)
    	{
    		cout<<*iter<<endl;
    	}
    	cout<<"------------"<<endl;
    	return 0;
    }
    展开全文
  • 递归实现遍历 void DIR_FUN(TCHAR* szPath) { if(!szPath) return; TCHAR szTmpPath[MAX_PATH] = {0}; HANDLE hHandle; WIN32_FIND_DATA wfd; StringCchCopy(szTmpPath, MAX_PATH, szPath); ...
  •  if(tempFind.IsDirectory()) //找到的是文件夹,则遍历文件夹下的文件  {  strTmp="";  strTmp=tempFind.GetFilePath();  FindFile(strTmp);  }  else  {  ...
  • windows遍历文件夹

    2020-01-15 14:20:19
    windows遍历文件夹 代码 #include <windows.h> #include <vector> #include <algorithm> #include <fstream> #include <sstream> #include <typeinfo> #include <string&...
  • 【实例简介】【实例截图】【核心代码】using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;...using System.Windows.Forms;using ...
  • I’m running a batch to do an update to my sql ... I’m using windows scheduler to run the batch file. Each day files come in at different time. Sometime they come in after my scheduled time therefor...
  • C++遍历文件夹文件(Qt和Windows两种遍历)** Qt遍历文件夹文件 //利用Qt遍历 QStringList ErgodicFile::fErgodicFile(const QString &amp;config) { //判断路径是否存在 QDir dir(config); if(!dir.exists()...
  • windows API递归遍历文件夹下所有文件

    千次阅读 2014-11-18 20:46:52
    windows API递归遍历文件夹下所有文件
  • python发现文件夹下所有的jpg文件,并且安装文件排放的顺序输出glob模块是最简单的模块之一,内容非常少。用它可以查找符合特定规则的文件路径名。跟使用windows下的文件搜索差不多。查找文件只用到三个匹配符:”*...
  • #region API 遍历文件夹及其子文件夹和子文件 #region 声明WIN32API函数以及结构 ************************************** [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] private ...
  • Windows下,在VS中开发,C++遍历文件夹下文件。 在Windows下,遍历文件所用到的函数和结构体,需要在程序中包含头文件#include <io.h>,在VS中,头文件io.h实际上是包含了另一个头文件corecrt_io.h的,所以...
  • #include <io.h>#include <stdio.h>#include <iostream>using namespace std;int ReadStationID(char(*id)[50]){ struct _finddata_t c_file; long hFile; char *p = NULL; int i = 0;...
  • windows与Linux平台下Matlab遍历文件夹下子文件夹及文件
  • 这个需求非常常见,例如批量转换文件格式等等,代码如下: @echo off ::对变量动态捕获扩展变化 ...::遍历文件夹下的PDF,并把后缀改成txt for %%c in (.\pdf\*.pdf) do ( set pdfpath=%%c set txtpath=%...
  • void TraverseDir( CString strDir, CAtlArray<CString>& arrFilePaths) { HANDLE hFile; if (!DataConvert::StringEqual(strDir.Right(1), _T("\\"))) strDir.Append(_T("\\"));... CString strSearch = ...
  • 遍历文件夹windows

    2013-01-05 14:58:16
    写这篇博客主要是深化一下记忆,就是搜索字符串 1、C:\bbb 就是搜索这个文件存在搜索到,不存在,出错 ...遍历方式: _finddata_t fileInfo; long handle; CString localDir=""; handle=_findfirst((LPCTSTR)(loc
  • C++下遍历文件夹

    2015-04-27 20:39:55
    C++下遍历文件夹 编写程序遍历文件夹及其子文件夹下所有文件,并输出到标准输出流或者文件流。 1. 先考虑在单层目录下,遍历所有文件。以C:\WINDOWS为例: 用到数据结构_finddata_t,文件信息结构体的指针。 ...
  • #include"stdafx.h" ...#include<windows.h> #include<iostream> #include<string> #include using namespace std; int count = 0; // 注意,lpPath最后带一个反斜杠\ // 例如:"C:\\Users\\ki
  • 本文实例讲述了C++遍历文件夹下文件的方法。分享给大家供大家参考。具体如下: #include <windows> #include #include #define LEN 1024 // 深度优先递归遍历目录中所有的文件 BOOL DirectoryList(LPCSTR Path) {...
  • c++遍历文件夹

    2012-11-13 11:27:27
    windows遍历文件夹: void TraverseFolder(char path[260], const char *fileExt) { WIN32_FIND_DATA FindFileData; HANDLE hFind; char curDir[260]; SetCurrentDirectory(path); hFind = FindFirstFile...
  • C++ - 深度搜索遍历文件夹

    千次阅读 2013-11-26 21:12:18
    深度优先搜索遍历文件夹所有文件, 由于使用windows的函数, 必须要使用C语言; 注意字符集的问题,使用"#undef UNICODE", 屏蔽因字符集所产生的问题; 代码如下: #undef UNICODE #include #include #include #...
  • 本文实例为大家分享了C#遍历文件夹获取指定后缀名文件的具体代码,供大家参考,具体内容如下 问题描述: 项目需要,要进行某文件夹下所有shp数据的读取 解决方法: using System; using System.Collections.Generic...
  • vba遍历文件夹中的文件夹 使用方便 (Ease of use) The goal is to read and create cabinet folders with no third-party tools or libraries that are not already present in the user's machine. As you will see...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,398
精华内容 559
关键字:

windows遍历文件夹