windows下文件夹下查找问题

papapa123123 2009-06-23 05:27:21
现在问题是这样的,
有一个A文件夹, A下可能有四个文件夹a,b,c,d(a,b,c,d名字不确定,也可能只有一个文件夹),在a,b,c,d下有分别有一个文件(该文件名也不固定),但是文件名中有一部分字符是知道的,例如:a 下有ZZ_090622.txt ,b下是xx_090623.txt,文件名我是不知道的,但是知道要搜索的文件名中包括的字符串090622和文件后缀。
现在我该怎么快速的搜索到该文件在那个目录下呢?高手指点有高效的算法可再加分。
WIN32_FIND_DATA

FindFirstFile,FindNextFile似乎可以做。但是现在文件夹名字和具体文件名是不知道的。。

小弟先谢谢各位了。
讨论有分
...全文
139 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
moon2008moon 2009-06-24
  • 打赏
  • 举报
回复

struct MyUeniFile
{
int type;
std::string name;
std::string path;
std::string cPath;
};
//获取一个目录下的所有文件
void cFileCtrl::getDirFile(const char* dirPath)
{
char pathBuf[256];
sprintf( pathBuf, "%s\\*.*", dirPath);

WIN32_FIND_DATA findFile;
HANDLE nHandle = ::FindFirstFile( pathBuf, &findFile );
do
{
if( nHandle == (HANDLE)0xffffffff)
break;
else
{
string fileName = findFile.cFileName;
char fulPath[256] = {0};
sprintf(fulPath, "%s\\%s", dirPath, fileName.c_str());
fileName = fulPath;

MyUeniFile tmpUeni;
tmpUeni.name = findFile.cFileName;
tmpUeni.path = fulPath;
tmpUeni.cPath = fulPath;
int pointIndex = fileName.find('.');
if( pointIndex == -1)
{
string newWp = fulPath;
getDirFile(newWp.c_str());
continue;
}
string strType = fileName.substr( pointIndex, fileName.length());
if( strType == ".lua" )
{
tmpUeni.type = 0;
allFileName.push_back(tmpUeni);
}
if( strType == ".xml" )
{
tmpUeni.type = 1;
allFileName.push_back(tmpUeni);
}
if( strType == ".txt" )
{
tmpUeni.type = 2;
allFileName.push_back(tmpUeni);
}
}

}

while(::FindNextFile(nHandle, &findFile));
::FindClose(nHandle);
}


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/moon2008moon/archive/2009/06/16/4274084.aspx
matrixcl 2009-06-24
  • 打赏
  • 举报
回复
多线程并不能提高效率,只是可以在后台处理,不影响界面响应。
要改成多线程也很简单,把函数名规范化一下,类似这样DWORD WINAPI FindFiles(LPVOID lpParam)
然后起个线程调就可以


上面那个递归的效率是由的文件夹结构决定的,找到所需文件之前,会把那个根目录下的所有文件和文件夹枚举一遍。
matrixcl 2009-06-24
  • 打赏
  • 举报
回复
你的代码里:
if (_tcscmp(findData.cFileName, _T(".")) != 0 && _tcscmp(findData.cFileName, _T("..")) != 0)
红色为什么这么比较呢?
----------------------------------------------------------
因为找到的文件有两个特殊的 “.” 和 “..”,前者是打开当前目录,后者打开上一级目录
papapa123123 2009-06-24
  • 打赏
  • 举报
回复
哦。。。 明白了。。。呵呵!!谢谢楼上各位。。下午结贴
alan001 2009-06-24
  • 打赏
  • 举报
回复
up
papapa123123 2009-06-24
  • 打赏
  • 举报
回复
lpFileName
[in] Pointer to a null-terminated string that specifies a valid directory or path and filename, which can contain wildcard characters (* and ?).
There is a default string size limit for paths of MAX_PATH characters. This limit is related to how the FindFirstFile function parses paths.

找到的文件名路径。。。。 要是文件的话是不是就是这种格式 .\ ,要是目录的话..\
papapa123123 2009-06-24
  • 打赏
  • 举报
回复
9楼的兄弟
你的代码里:
if (_tcscmp(findData.cFileName, _T(".")) != 0 && _tcscmp(findData.cFileName, _T("..")) != 0)
红色为什么这么比较呢?
老邓 2009-06-23
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 papapa123123 的回复:]
弱弱问下,这样递归的效率如何。。尤其在主频才180M的系统上。。
[/Quote]要效率高,最好是多线程。
papapa123123 2009-06-23
  • 打赏
  • 举报
回复
弱弱问下,这样递归的效率如何。。尤其在主频才180M的系统上。。
papapa123123 2009-06-23
  • 打赏
  • 举报
回复
恩。。非常感谢各位。明天试一下。。不过我的是在wince设备上 。。
matrixcl 2009-06-23
  • 打赏
  • 举报
回复

//这个是循环多级子目录的,效率低一些

/*
现在问题是这样的,
有一个A文件夹, A下可能有四个文件夹a,b,c,d(a,b,c,d名字不确定,也可能只有一个文件夹),在a,b,c,d下有
分别有一个文件(该文件名也不固定),但是文件名中有一部分字符是知道的,例如:a 下有ZZ_090622.txt ,
b下是xx_090623.txt,文件名我是不知道的,但是知道要搜索的文件名中包括的字符串090622和文件后缀。

现在我该怎么快速的搜索到该文件在那个目录下呢?高手指点有高效的算法可再加分。
WIN32_FIND_DATA

FindFirstFile,FindNextFile似乎可以做。但是现在文件夹名字和具体文件名是不知道的。。

本地文件结构

D:\tmp
1
1.txt
2
11_090622.txt
3
11_090623.txt
4
2.txt

*/
#define BASE_PAHT _T("D:\\tmp") //查找根目录
#define FILE_SPE_STR _T("090622") //文件含有的特殊串


//这个函数可以循环查找文件夹,不限于一级
//结果只返回找的的第一个文件的文件夹
TCHAR * FindSpeFilePath(TCHAR * strRoot)
{
TCHAR *pRet = NULL;
TCHAR filePath[260] = {0};
_tcscpy(filePath, strRoot);
_tcscat(filePath, _T("\\*"));
WIN32_FIND_DATA findData;
HANDLE fileHandle;
fileHandle = FindFirstFile(filePath, &findData);
if (fileHandle != INVALID_HANDLE_VALUE)
{
if (_tcscmp(findData.cFileName, _T(".")) != 0 && _tcscmp(findData.cFileName, _T("..")) != 0)
{
if (!(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
if (_tcsstr(findData.cFileName, FILE_SPE_STR) != NULL) //找到了
{
pRet = new TCHAR[_tcslen(strRoot) + 1];
_tcscpy(pRet, strRoot);
FindClose(fileHandle);
return pRet;
}
}
else
{
TCHAR subFilePath[260] = {0};
_tcscpy(subFilePath, strRoot);
_tcscat(subFilePath, _T("\\"));
_tcscat(subFilePath, findData.cFileName);
pRet = FindSpeFilePath(subFilePath);//文件夹,递归寻找
if (pRet != NULL)
{
return pRet;
}
}
}

while (FindNextFile(fileHandle, &findData))
{
if (_tcscmp(findData.cFileName, _T(".")) != 0 && _tcscmp(findData.cFileName, _T("..")) != 0)
{
if (!(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
if (_tcsstr(findData.cFileName, FILE_SPE_STR) != NULL) //找到了
{
pRet = new TCHAR[_tcslen(strRoot) + 1];
_tcscpy(pRet, strRoot);
FindClose(fileHandle);
return pRet;
}
}
else
{
TCHAR subFilePath[260] = {0};
_tcscpy(subFilePath, strRoot);
_tcscat(subFilePath, _T("\\"));
_tcscat(subFilePath, findData.cFileName);
pRet = FindSpeFilePath(subFilePath);//文件夹,递归寻找
if (pRet != NULL)
{
return pRet;
}
}
}
}
FindClose(fileHandle);
}
return NULL;
}


//用法
TCHAR * pStr = FindSpeFilePath(BASE_PAHT);
if (pStr != NULL)
{
MessageBox(NULL, pStr, NULL, MB_OK);
delete pStr;
pStr = NULL;
}




//这个是只考录下一级子目录的

//这个函数只查找文件夹下一级子目录中是否含有特定文件
//结果只返回找的的第一个文件的文件夹
TCHAR * FindSpeFilePath2(TCHAR * strRoot)
{
TCHAR *pRet = NULL;
TCHAR filePath[260] = {0};
_tcscpy(filePath, strRoot);
_tcscat(filePath, _T("\\*"));
WIN32_FIND_DATA findData;
HANDLE fileHandle;
fileHandle = FindFirstFile(filePath, &findData);
if (fileHandle != INVALID_HANDLE_VALUE)
{
if (_tcscmp(findData.cFileName, _T(".")) != 0 && _tcscmp(findData.cFileName, _T("..")) != 0)
{
if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)//1级目录
{
TCHAR subFilePath[260] = {0};
_tcscpy(filePath, strRoot);
_tcscat(filePath, _T("\\"));
_tcscat(filePath, findData.cFileName);//子目录路径

_tcscpy(subFilePath, filePath);
_tcscat(subFilePath, _T("\\*"));
_tcscat(subFilePath, FILE_SPE_STR);
_tcscat(subFilePath, _T("*"));//组合出类似 D:\tmp\1\*090622* 这样的字符串
WIN32_FIND_DATA findData2;
HANDLE fileHandle2;
fileHandle2 = FindFirstFile(subFilePath, &findData2);
if (fileHandle2 != INVALID_HANDLE_VALUE)
{
pRet = new TCHAR[_tcslen(filePath) + 1];
_tcscpy(pRet, filePath);
FindClose(fileHandle2);
return pRet;
}
}
}

while (FindNextFile(fileHandle, &findData))
{
if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)//1级目录
{
TCHAR subFilePath[260] = {0};
_tcscpy(filePath, strRoot);
_tcscat(filePath, _T("\\"));
_tcscat(filePath, findData.cFileName);//子目录路径

_tcscpy(subFilePath, filePath);
_tcscat(subFilePath, _T("\\*"));
_tcscat(subFilePath, FILE_SPE_STR);
_tcscat(subFilePath, _T("*"));//组合出类似 D:\tmp\1\*090622* 这样的字符串
WIN32_FIND_DATA findData2;
HANDLE fileHandle2;
fileHandle2 = FindFirstFile(subFilePath, &findData2);
if (fileHandle2 != INVALID_HANDLE_VALUE)
{
pRet = new TCHAR[_tcslen(filePath) + 1];
_tcscpy(pRet, filePath);
FindClose(fileHandle2);
return pRet;
}
}
}
FindClose(fileHandle);
}
return NULL;
}

//用法
TCHAR *pStr = FindSpeFilePath2(BASE_PAHT);
if (pStr != NULL)
{
MessageBox(NULL, pStr, NULL, MB_OK);
delete pStr;
pStr = NULL;
}
HelloDan 2009-06-23
  • 打赏
  • 举报
回复


WIN32_FIND_DATA fileinfo;
HANDLE hFind = FindFirstFile(szPath, &fileinfo);
if(hFind == INVALID_HANDLE_VALUE)
return 0;

if((0 == _tcscmp(fileinfo.cFileName, _T(".")) || (0 == _tcscmp(fileinfo.cFileName, _T(".."))))) //当前文件夹或上一级文件夹
//.................................
else if(fileinfo.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY) //文件夹
{
CString szSubFolder = szPath;
szSubFolder.Delete(szSubFolder.GetLength()-1, 1);
szSubFolder += fileinfo.cFileName;
szSubFolder += _T("\\");
//......................................................
}
else
// 这是一个文件。


FindNextFile(hFind, &fileinfo) //寻找下一个。

oyljerry 2009-06-23
  • 打赏
  • 举报
回复
FindFirstFile/FindNextFile,遍历所有的目录下的文件,然后取出文件名来查找关键字等来匹配
老邓 2009-06-23
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/en-us/library/aa364418(VS.85).aspx

HANDLE WINAPI FindFirstFile(
__in LPCTSTR lpFileName,
__out LPWIN32_FIND_DATA lpFindFileData
);

注意第一个参数!lpFileName 参数说明中要求你需要指定你查找的通配符。
lingyin55 2009-06-23
  • 打赏
  • 举报
回复
用FindFirstFile



#include <windows.h>
#include <tchar.h>
#include <cassert>

#include <iostream>
#include <vector>
#include <string>
using namespace std;

typedef std::basic_string< TCHAR > _tstring;
typedef std::vector< _tstring > filename_vec;

// in : 文件目录 扩展名(不带.)
// out : 文件名vector
filename_vec FindInFolder( const TCHAR* strFolderName, const TCHAR* strExtFilter = _T("*") )
{
assert( strFolderName != NULL );

// 文件名队列
filename_vec vecFiles;

WIN32_FIND_DATA fd;
HANDLE hFind = INVALID_HANDLE_VALUE;

TCHAR szBuf[MAX_PATH];
#if _MSC_VER > 1310
_tcscpy_s( szBuf, strFolderName );
#else
_tcscpy( szBuf, strFolderName );
#endif // #if _MSC_VER > 1310

// 添加
if( szBuf[ _tcslen(szBuf) - 1 ] != _T('\\') )
{
#if _MSC_VER > 1310
_tcscat_s( szBuf, _T("\\*") );
#else
_tcscat( szBuf, _T("\\*") );
#endif // _MSC_VER > 1310
}
else
{
#if _MSC_VER > 1310
_tcscat_s( szBuf, _T("*") );
#else
_tcscat( szBuf, _T("*") );
#endif // _MSC_VER > 1310
}

hFind = ::FindFirstFile( szBuf, &fd );

if( INVALID_HANDLE_VALUE != hFind )
{
while ( ::FindNextFile(hFind, &fd) != 0 )
{
if( !(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) )
{ // 属性为文件
if( 0 == _tcsicmp( strExtFilter, _T("*") ) )
{
// 所有文件
vecFiles.push_back( fd.cFileName );
}
else
{
_tstring str( fd.cFileName );
const _tstring::size_type pos = str.find_last_of( _T('.') );
if( pos == _tstring::npos )
{
// 找不到. 那么没有扩展名
continue;
}

if( str.substr( pos+1 ) == strExtFilter )
{
vecFiles.push_back(fd.cFileName);
}
}
}
}

::FindClose( hFind );
}

return vecFiles;
}

int _tmain()
{

#ifdef _UNICODE
#define _tcout wcout
_tcout.imbue( std::locale("chs") );
#else
#define _tcout cout
#endif

// 查找当前目录下面的所有文件名
TCHAR szbuf[MAX_PATH];
GetCurrentDirectory( MAX_PATH, szbuf );
filename_vec vec = FindInFolder( szbuf );
copy(
vec.begin(),
vec.end(),
ostream_iterator<_tstring, _tstring::value_type >(_tcout, _T("\n") )
);

// 查找当前目录下面的txt
_tcout<< _T("---------------- 我是分割线 ----------------------- ") << endl;
vec.clear();

vec = FindInFolder( szbuf, _T("txt") );
copy(
vec.begin(),
vec.end(),
ostream_iterator<_tstring, _tstring::value_type >(_tcout, _T("\n") )
);

// 查找任意目录
_tcout<< _T("---------------- 我是分割线 ----------------------- ") << endl;
vec.clear();

vec = FindInFolder( _T("E:\\Documents\\杂文集"), _T("txt") );
copy(
vec.begin(),
vec.end(),
ostream_iterator<_tstring, _tstring::value_type >(_tcout, _T("\n") )
);

return 0;
}
老邓 2009-06-23
  • 打赏
  • 举报
回复
lpFileName 参数说明中要求你需要指定你查找的通配符:
[in] Pointer to a null-terminated string that specifies a valid directory or path and file name, which can contain wildcard characters (* and ?).

我用的是msdn在线帮助,这里是FindFirstFile函数说明,例子在它底下有。

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/findfirstfile.asp
Meteor_Code 2009-06-23
  • 打赏
  • 举报
回复
A文件夹名也不确定吗?确定的话就用FindFirstFile,FindNextFile找就可以了啊!
FindNextFile在返回是会告诉你找到的是文件,还是目录,是目录就继续找下去,文件就分析一下文件名。
有一位蔡大哥有个博,你参考吧

在开发软件的过程里,经常需要维护目录里的数据。比如在开发银行的信用卡系统里,由于每天创建的LOG非常多,那么一个很大的硬盘,在6个月后,就占用了很多空间。这时就有这样的一个需求,把所有超过6个月的LOG数据定期删除掉。要实现这个功能就得遍历整个目录,把文件名称和文件创建的时间都超过6个月时间的文件删除掉。因此,就需使用到下面的API函数FindFirstFile和FindNextFile来实现这样的功能,FindFirstFile函数是查找到目录下的第一个文件或目录,FindNextFile函数是查找下一文件或目录。


函数FindFirstFile、FindNextFile和FindClose声明如下:

WINBASEAPI
__out
HANDLE
WINAPI
FindFirstFileA(
__in LPCSTR lpFileName,
__out LPWIN32_FIND_DATAA lpFindFileData
);
WINBASEAPI
__out
HANDLE
WINAPI
FindFirstFileW(
__in LPCWSTR lpFileName,
__out LPWIN32_FIND_DATAW lpFindFileData
);
#ifdef UNICODE
#define FindFirstFile FindFirstFileW
#else
#define FindFirstFile FindFirstFileA
#endif // !UNICODE

WINBASEAPI
BOOL
WINAPI
FindNextFileA(
__in HANDLE hFindFile,
__out LPWIN32_FIND_DATAA lpFindFileData
);
WINBASEAPI
BOOL
WINAPI
FindNextFileW(
__in HANDLE hFindFile,
__out LPWIN32_FIND_DATAW lpFindFileData
);
#ifdef UNICODE
#define FindNextFile FindNextFileW
#else
#define FindNextFile FindNextFileA
#endif // !UNICODE

WINBASEAPI
BOOL
WINAPI
FindClose(
__inout HANDLE hFindFile
);

lpFileName是目录名称。一般使用通配符。
lpFindFileData是找到的文件或目录属性。
hFindFile是下一个文件或目录的句柄。

调用函数的例子如下:
#001 #pragma once
#002
#003 //
#004 //遍历一个目录的文件。
#005 //蔡军生 2007/10/25 QQ:9073204 深圳
#006 //
#007 class CFindFile
#008 {
#009 public:
#010
#011 CFindFile(void)
#012 {
#013 m_hFind = INVALID_HANDLE_VALUE;
#014 m_bFound = false;
#015 memset(&m_FindFileData,0,sizeof(m_FindFileData));
#016 }
#017
#018 ~CFindFile(void)
#019 {
#020 if (m_hFind != INVALID_HANDLE_VALUE)
#021 {
#022 ::FindClose(m_hFind);
#023 }
#024 }
#025
#026 //找到第一个文件。
#027 void First(LPCTSTR lpFileName)
#028 {
#029 m_hFind = ::FindFirstFile(lpFileName,&m_FindFileData);
#030 if (m_hFind != INVALID_HANDLE_VALUE)
#031 {
#032 m_bFound = true;
#033 }
#034 else
#035 {
#036 m_bFound = false;
#037 }
#038 }
#039
#040 //查找一下文件。
#041 void Next(void)
#042 {
#043 m_bFound = FindNextFile(m_hFind, &m_FindFileData) ? true:false;
#044 }
#045
#046 //是否可以查找一下文件。
#047 bool IsOK(void) const
#048 {
#049 return m_bFound;
#050 }
#051
#052 //返回当前文件的属性。
#053 const WIN32_FIND_DATA& GetCurFile(void)
#054 {
#055 return m_FindFileData;
#056 }
#057
#058 protected:
#059 HANDLE m_hFind; //保存当查找的位置句柄。
#060 bool m_bFound; //当前查找是否成功。
#061 WIN32_FIND_DATA m_FindFileData;//保存当前文件的属性。
#062
#063 };
#064

使用如下:
#001 //查找文件。
#002 CFindFile findDemo;
#003 for (findDemo.First(_T(".\\*"));
#004 findDemo.IsOK();
#005 findDemo.Next())
#006 {
#007 //
#008 OutputDebugString(findDemo.GetCurFile().cFileName);
#009 OutputDebugString(_T("\r\n"));
#010 }
#011


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/caimouse/archive/2007/10/25/1844006.aspx
老邓 2009-06-23
  • 打赏
  • 举报
回复
FindFirstFile可以指定条件的,比如:tes*.exe
w0911h 2009-06-23
  • 打赏
  • 举报
回复
CFindFile类也不需要知道具体名字
DirectX修复工具(DirectX Repair)是一款系统级工具软件,简便易用。本程序为绿色版,无需安装,可直接运行。 本程序的主要功能是检测当前系统的DirectX状态,如果发现异常则进行修复。程序主要针对0xc000007b问题设计,可以完美修复该问题。本程序中包含了最新版的DirectX redist(Jun2010),并且全部DX文件都有Microsoft的数字签名,安全放心。 本程序为了应对一般电脑用户的使用,采用了傻瓜式一键设计,只要点击主界面上的“检测并修复”按钮,程序就会自动完成校验、检测、下载、修复以及注册的全部功能,无需用户的介入,大大降低了使用难度。 本程序适用于多个操作系统,如Windows XP(需先安装.NET 2.0,详情请参阅“致Windows XP用户.txt”文件)、Windows Vista、Windows 7、Windows 8、Windows 8.1、Windows 8.1 Update、Windows 10,同时兼容32位操作系统和64位操作系统。本程序会根据系统的不同,自动调整任务模式,无需用户进行设置。 本程序的V3.3版分为标准版、增强版以及在线修复版。其中的标准版以及增强版都包含完整的DirectX组件。除此之外,增强版中还额外包含了c++ Redistributable Package,因此增强版不但能解决DirectX组件的问题,而且还能解决c++组件异常产生的问题。增强版适合无法自行解决c++相关问题的用户使用。在线修复版的功能与标准版相同,只是其所需的文件将通过Internet下载,因此大大减小了程序的体积。本程序的各个版本之间,主程序完全相同,只是配套使用的数据包不同。因此,当您使用标准版数据包时,程序将进行标准修复;当您使用增强版的数据包时,程序将进行增强修复;当数据包不全或没有数据包(即只有DirectX Repair.exe程序)时,程序将进行在线修复。在线修复、离线修复可自由灵活组合,充分满足不同用户的需要。 本程序自V2.0版起采用全新的底层程序架构,使用了异步多线程编程技术,使得检测、下载、修复单独进行,互不干扰,快速如飞。新程序更改了自我校验方式,因此使用新版本的程序时不会再出现自我校验失败的错误;但并非取消自我校验,因此程序安全性与之前版本相同,并未降低。 程序有自动更新c++功能。由于绝大多数软件运行时需要c++的支持,并且c++的异常也会导致0xc000007b错误,因此程序在检测修复的同时,也会根据需要更新系统中的c++组件。自V3.2版本开始使用了全新的c++扩展包,可以大幅提高工业软件修复成功的概率。修复c++的功能仅限于增强版,标准版及在线修复版在系统c++异常时(非丢失时)会提示用户使用增强版进行修复。 程序有两种窗口样式。正常模式即默认样式,适合绝大多数用户使用。另有一种简约模式,此时窗口将只显示最基本的内容,修复会自动进行,修复完成10秒钟后会自动退出。该窗口样式可以使修复工作变得更加简单快速,同时方便其他软件、游戏将本程序内嵌,即可进行无需人工参与的快速修复。开启简约模式的方法是:打开程序所在目录下的“Settings.ini”文件(如果没有可以自己创建),将其中的“FormStyle”一项的值改为“Simple”并保存即可。 程序有高级筛选功能,开启该功能后用户可以自主选择要修复的文件,避免了其他不必要的修复工作。同时,也支持通过文件进行辅助筛选,只要在程序目录下建立“Filter.dat”文件,其中的每一行写一个需要修复文件的序号即可。该功能仅针对高级用户使用,并且必须在正常窗口模式下才有效(简约模式时无效)。 本程序有自动记录日志功能,可以记录每一次检测修复结果,方便在出现问题时,及时分析和查找原因,以便找到解决办法。 程序的“选项”对话框中包含了4项高级功能。点击其中的“注册系统文件夹中所有dll文件”按钮可以自动注册系统文件夹下的所有dll文件。该项功能不仅能修复DirectX的问题,还可以修复系统中很多其他由于dll未注册而产生的问题,颇为实用。点击该按钮旁边的小箭头,还可以注册任意指定文件夹下的dll文件,方便用户对绿色版、硬盘版的程序组件进行注册。点击第二个按钮可以为dll文件的右键菜单添加“注册”和“卸载”项,方便对单独的dll文件进行注册。请注意,并不是所有的dll文件都可以通过这种方式注册。点击“DirectX版本”选项卡可以自行修改系统中DirectX的版本信息。点击“DirectX加速”选项卡可以控制系统中DirectX加速的开启与关闭。 新版程序集成了用户反馈程序,可以在用户允许的前提下发送检测修复结果。用户也可以在出现问题时通过反馈程序和软件作者进行交流,共同查找问题。反馈是完全自愿和匿名(如果不填写E-mail地址)的。 本程序的通用版基于Microsoft .NET Framework 2.0开发,对于Windows 2000、Windows XP、Windows 2003的用户需要首先安装.NET Framework 2.0或更高版本方可运行本程序。有关下载和安装的详细信息请参阅“致Windows XP用户.txt”文件。对于Windows Vista、Windows 7及后续用户,可以直接运行本程序。 同时鉴于Windows 8(Windows 8.1、Windows 8.1 Update)、Windows 10系统中默认未包含.NET Framework 2.0,因此新版的程序文件夹内将包含一个DirectX_Repair_win8的特别版程序,该程序功能与通用版相同,基于.NET Framework 4.0开发,可以在Windows8(Windows 8.1、Windows 8.1 Update)、Windows 10系统中直接运行(其他系统如果安装了.NET Framework 4.0也可以运行这个特别版的程序)。 本程序的官方博客地址为:http://blog.csdn.net/vbcom/article/details/6962388 所有的更新以及技术支持都可以到该博客上找到。
DirectX修复工具(DirectX Repair)是一款系统级工具软件,简便易用。本程序为绿色版,无需安装,可直接运行。 本程序的主要功能是检测当前系统的DirectX状态,如果发现异常则进行修复。程序主要针对0xc000007b问题设计,可以完美修复该问题。本程序中包含了最新版的DirectX redist(Jun2010),并且全部DX文件都有Microsoft的数字签名,安全放心。 本程序为了应对一般电脑用户的使用,采用了傻瓜式一键设计,只要点击主界面上的“检测并修复”按钮,程序就会自动完成校验、检测、下载、修复以及注册的全部功能,无需用户的介入,大大降低了使用难度。 本程序适用于多个操作系统,如Windows XP(需先安装.NET 2.0,详情请参阅“致Windows XP用户.txt”文件)、Windows Vista、Windows 7、Windows 8、Windows 8.1、Windows 8.1 Update、Windows 10,同时兼容32位操作系统和64位操作系统。本程序会根据系统的不同,自动调整任务模式,无需用户进行设置。 本程序的V3.3版分为标准版、增强版以及在线修复版。其中的标准版以及增强版都包含完整的DirectX组件。除此之外,增强版中还额外包含了c++ Redistributable Package,因此增强版不但能解决DirectX组件的问题,而且还能解决c++组件异常产生的问题。增强版适合无法自行解决c++相关问题的用户使用。在线修复版的功能与标准版相同,只是其所需的文件将通过Internet下载,因此大大减小了程序的体积。本程序的各个版本之间,主程序完全相同,只是配套使用的数据包不同。因此,当您使用标准版数据包时,程序将进行标准修复;当您使用增强版的数据包时,程序将进行增强修复;当数据包不全或没有数据包(即只有DirectX Repair.exe程序)时,程序将进行在线修复。在线修复、离线修复可自由灵活组合,充分满足不同用户的需要。 本程序自V2.0版起采用全新的底层程序架构,使用了异步多线程编程技术,使得检测、下载、修复单独进行,互不干扰,快速如飞。新程序更改了自我校验方式,因此使用新版本的程序时不会再出现自我校验失败的错误;但并非取消自我校验,因此程序安全性与之前版本相同,并未降低。 程序有自动更新c++功能。由于绝大多数软件运行时需要c++的支持,并且c++的异常也会导致0xc000007b错误,因此程序在检测修复的同时,也会根据需要更新系统中的c++组件。自V3.2版本开始使用了全新的c++扩展包,可以大幅提高工业软件修复成功的概率。修复c++的功能仅限于增强版,标准版及在线修复版在系统c++异常时(非丢失时)会提示用户使用增强版进行修复。 程序有两种窗口样式。正常模式即默认样式,适合绝大多数用户使用。另有一种简约模式,此时窗口将只显示最基本的内容,修复会自动进行,修复完成10秒钟后会自动退出。该窗口样式可以使修复工作变得更加简单快速,同时方便其他软件、游戏将本程序内嵌,即可进行无需人工参与的快速修复。开启简约模式的方法是:打开程序所在目录下的“Settings.ini”文件(如果没有可以自己创建),将其中的“FormStyle”一项的值改为“Simple”并保存即可。 程序有高级筛选功能,开启该功能后用户可以自主选择要修复的文件,避免了其他不必要的修复工作。同时,也支持通过文件进行辅助筛选,只要在程序目录下建立“Filter.dat”文件,其中的每一行写一个需要修复文件的序号即可。该功能仅针对高级用户使用,并且必须在正常窗口模式下才有效(简约模式时无效)。 本程序有自动记录日志功能,可以记录每一次检测修复结果,方便在出现问题时,及时分析和查找原因,以便找到解决办法。 程序的“选项”对话框中包含了4项高级功能。点击其中的“注册系统文件夹中所有dll文件”按钮可以自动注册系统文件夹下的所有dll文件。该项功能不仅能修复DirectX的问题,还可以修复系统中很多其他由于dll未注册而产生的问题,颇为实用。点击该按钮旁边的小箭头,还可以注册任意指定文件夹下的dll文件,方便用户对绿色版、硬盘版的程序组件进行注册。点击第二个按钮可以为dll文件的右键菜单添加“注册”和“卸载”项,方便对单独的dll文件进行注册。请注意,并不是所有的dll文件都可以通过这种方式注册。点击“DirectX版本”选项卡可以自行修改系统中DirectX的版本信息。点击“DirectX加速”选项卡可以控制系统中DirectX加速的开启与关闭。 新版程序集成了用户反馈程序,可以在用户允许的前提下发送检测修复结果。用户也可以在出现问题时通过反馈程序和软件作者进行交流,共同查找问题。反馈是完全自愿和匿名(如果不填写E-mail地址)的。 本程序的通用版基于Microsoft .NET Framework 2.0开发,对于Windows 2000、Windows XP、Windows 2003的用户需要首先安装.NET Framework 2.0或更高版本方可运行本程序。有关下载和安装的详细信息请参阅“致Windows XP用户.txt”文件。对于Windows Vista、Windows 7及后续用户,可以直接运行本程序。 同时鉴于Windows 8(Windows 8.1、Windows 8.1 Update)、Windows 10系统中默认未包含.NET Framework 2.0,因此新版的程序文件夹内将包含一个DirectX_Repair_win8的特别版程序,该程序功能与通用版相同,基于.NET Framework 4.0开发,可以在Windows8(Windows 8.1、Windows 8.1 Update)、Windows 10系统中直接运行(其他系统如果安装了.NET Framework 4.0也可以运行这个特别版的程序)。 本程序的官方博客地址为:http://blog.csdn.net/vbcom/article/details/6962388 所有的更新以及技术支持都可以到该博客上找到。
DirectX修复工具(DirectX Repair)是一款系统级工具软件,简便易用。本程序为绿色版,无需安装,可直接运行。 本程序的主要功能是检测当前系统的DirectX状态,如果发现异常则进行修复。程序主要针对0xc000007b问题设计,可以完美修复该问题。本程序中包含了最新版的DirectX redist(Jun2010),并且全部DX文件都有Microsoft的数字签名,安全放心。 本程序为了应对一般电脑用户的使用,采用了傻瓜式一键设计,只要点击主界面上的“检测并修复”按钮,程序就会自动完成校验、检测、下载、修复以及注册的全部功能,无需用户的介入,大大降低了使用难度。 本程序适用于多个操作系统,如Windows XP(需先安装.NET 2.0,详情请参阅“致Windows XP用户.txt”文件)、Windows Vista、Windows 7、Windows 8、Windows Blue(Windows 8.1),同时兼容32位操作系统和64位操作系统。本程序会根据系统的不同,自动调整任务模式,无需用户进行设置。 本程序的V3.0版分为标准版、增强版以及在线修复版。其中的标准版以及增强版都包含完整的DirectX组件,增强版中还额外包含了c++ Redistributable Package,因此增强版适合无法自行解决c++相关问题的用户使用;在线修复版的功能与标准版相同,只是其所需的文件将通过Internet下载,因此大大减小了程序的体积。本程序的各个版本之间,主程序完全相同,只是配套使用的数据包不同。因此,当您使用标准版数据包时,程序将进行标准修复;当您使用增强版的数据包时,程序将进行增强修复;当数据包不全或没有数据包(即只有DirectX Repair.exe程序)时,程序将进行在线修复。在线修复、离线修复可自由灵活组合,充分满足不同用户的需要。 本程序自V2.0版起采用全新的底层程序架构,使用了异步多线程编程技术,使得检测、下载、修复单独进行,互不干扰,快速如飞。新程序更改了自我校验方式,因此使用新版本的程序时不会再出现自我校验失败的错误;但并非取消自我校验,因此程序安全性与之前版本相同,并未降低。 程序有自动更新c++功能。由于绝大多数软件运行时需要c++的支持,并且c++的异常也会导致0xc000007b错误,因此程序在检测修复的同时,也会根据需要更新系统中的c++组件。V3.0版本使用了全新的c++扩展包,可以大幅提高工业软件修复成功的概率。此功能仅限于增强版。 程序有两种窗口样式。正常模式即默认样式,适合绝大多数用户使用。另有一种简约模式,此时窗口将只显示最基本的内容,修复会自动进行,修复完成10秒钟后会自动退出。该窗口样式可以使修复工作变得更加简单快速,同时方便其他软件、游戏将本程序内嵌,即可进行无需人工参与的快速修复。开启简约模式的方法是:打开程序所在目录下的“Settings.ini”文件(如果没有可以自己创建),将其中的“FormStyle”一项的值改为“Simple”并保存即可。 程序有高级筛选功能,开启该功能后用户可以自主选择要修复的文件,避免了其他不必要的修复工作。同时,也支持通过文件进行辅助筛选,只要在程序目录下建立“Filter.dat”文件,其中的每一行写一个需要修复文件的序号即可。该功能仅针对高级用户使用,并且必须在正常窗口模式下才有效(简约模式时无效)。 本程序有自动记录日志功能,可以记录每一次检测修复结果,方便在出现问题时,及时分析和查找原因,以便找到解决办法。 程序的“选项”对话框中包含了3项高级功能。点击其中的“注册系统文件夹中所有dll文件”按钮可以自动注册系统文件夹下的所有dll文件。该项功能不仅能修复DirectX的问题,还可以修复系统中很多其他由于dll未注册而产生的问题,颇为实用。点击该按钮旁边的小箭头,还可以注册任意指定文件夹下的dll文件,方便用户对绿色版、硬盘版的程序组件进行注册。点击第二个按钮可以为dll文件的右键菜单添加“注册”和“卸载”项,方便对单独的dll文件进行注册。请注意,并不是所有的dll文件都可以通过这种方式注册。 新版程序集成了用户反馈程序,可以在用户允许的前提下发送检测修复结果。用户也可以在出现问题时通过反馈程序和软件作者进行交流,共同查找问题。反馈是完全自愿和匿名(如果不填写E-mail地址)的。 本程序的通用版基于Microsoft .NET Framework 2.0开发,对于Windows 2000、Windows XP、Windows 2003的用户需要首先安装.NET Framework 2.0或更高版本方可运行本程序。有关下载和安装的详细信息请参阅“致Windows XP用户.txt”文件。对于Windows Vista、Windows 7用户,可以直接运行本程序。 同时鉴于Windows 8(Windows Blue、Windows 8.1)系统中默认未包含.NET Framework 2.0,因此新版的程序文件夹内将包含一个DirectX_Repair_win8的特别版程序,该程序功能与通用版相同,基于.NET Framework 4.0开发,可以在Windows8(Windows Blue、Windows 8.1)系统中直接运行(其他系统如果安装了.NET Framework 4.0也可以运行这个特别版的程序)。 本程序的官方博客地址为:http://blog.csdn.net/vbcom/article/details/6962388所有的更新以及技术支持都可以到该博客上找到。
DirectX修复工具(DirectX Repair)是一款系统级工具软件,简便易用。本程序为绿色版,无需安装,可直接运行。 本程序的主要功能是检测当前系统的DirectX状态,如果发现异常则进行修复。程序主要针对0xc000007b问题设计,可以完美修复该问题。本程序中包含了最新版的DirectX redist(Jun2010),并且全部DX文件都有Microsoft的数字签名,安全放心。 本程序为了应对一般电脑用户的使用,采用了傻瓜式一键设计,只要点击主界面上的“检测并修复”按钮,程序就会自动完成校验、检测、下载、修复以及注册的全部功能,无需用户的介入,大大降低了使用难度。 本程序适用于多个操作系统,如Windows XP(需先安装.NET 2.0,详情请参阅“致Windows XP用户.txt”文件)、Windows Vista、Windows 7、Windows 8、Windows 8.1、Windows 8.1 Update、Windows 10,同时兼容32位操作系统和64位操作系统。本程序会根据系统的不同,自动调整任务模式,无需用户进行设置。 本程序的V3.5版分为标准版、增强版以及在线修复版。标准版支持修复DirectX的功能,而增强版则支持同时修复DirectX和c++的功能。在线修复版与标准版相同,默认只支持修复DirectX,但其所需的数据包需要在修复时自动下载。各个版本之间,主程序完全相同,只是其配套使用的数据包不同。因此,标准版和在线修复版可以通过补全扩展包的形式成为增强版。本程序自V3.5版起,自带扩展功能。只要在主界面的“工具”菜单下打开“选项”对话框,找到“扩展”标签,点击其中的“开始扩展”按钮即可。扩展过程需要Internet连接,扩展成功后重新运行程序即可使新的数据包生效。扩展用时根据网络速度不同而不同,最快仅需数秒,最慢需要数分钟,烦请耐心等待。 本程序自V2.0版起采用全新的底层程序架构,使用了异步多线程编程技术,使得检测、下载、修复单独进行,互不干扰,快速如飞。新程序更改了自我校验方式,因此使用新版本的程序时不会再出现自我校验失败的错误;但并非取消自我校验,因此程序安全性与之前版本相同,并未降低。 程序有自动更新c++功能。由于绝大多数软件运行时需要c++的支持,并且c++的异常也会导致0xc000007b错误,因此程序在检测修复的同时,也会根据需要更新系统中的c++组件。自V3.2版本开始使用了全新的c++扩展包,可以大幅提高工业软件修复成功的概率。修复c++的功能仅限于增强版,标准版及在线修复版在系统c++异常时(非丢失时)会提示用户使用增强版进行修复。 程序有两种窗口样式。正常模式即默认样式,适合绝大多数用户使用。另有一种简约模式,此时窗口将只显示最基本的内容,修复会自动进行,修复完成10秒钟后会自动退出。该窗口样式可以使修复工作变得更加简单快速,同时方便其他软件、游戏将本程序内嵌,即可进行无需人工参与的快速修复。开启简约模式的方法是:打开程序所在目录下的“Settings.ini”文件(如果没有可以自己创建),将其中的“FormStyle”一项的值改为“Simple”并保存即可。 程序有高级筛选功能,开启该功能后用户可以自主选择要修复的文件,避免了其他不必要的修复工作。同时,也支持通过文件进行辅助筛选,只要在程序目录下建立“Filter.dat”文件,其中的每一行写一个需要修复文件的序号即可。该功能仅针对高级用户使用,并且必须在正常窗口模式下才有效(简约模式时无效)。 本程序有自动记录日志功能,可以记录每一次检测修复结果,方便在出现问题时,及时分析和查找原因,以便找到解决办法。 程序的“选项”对话框中包含了5项高级功能。点击其中的“注册系统文件夹中所有dll文件”按钮可以自动注册系统文件夹下的所有dll文件。该项功能不仅能修复DirectX的问题,还可以修复系统中很多其他由于dll未注册而产生的问题,颇为实用。点击该按钮旁边的小箭头,还可以注册任意指定文件夹下的dll文件,方便用户对绿色版、硬盘版的程序组件进行注册。点击第二个按钮可以为dll文件的右键菜单添加“注册”和“卸载”项,方便对单独的dll文件进行注册。请注意,并不是所有的dll文件都可以通过这种方式注册。点击“扩展”选项卡可以将任意版本的程序扩展成增强版。点击“DirectX版本”选项卡,可以自行修改系统中DirectX的版本信息。点击“DirectX加速”选项卡可以控制系统中DirectX加速的开启与关闭。 新版程序集成了用户反馈程序,可以在用户允许的前提下发送检测修复结果。用户也可以在出现问题时通过反馈程序和软件作者进行交流,共同查找问题。反馈是完全自愿和匿名(如果不填写E-mail地址)的。 本程序的通用版基于Microsoft .NET Framework 2.0开发,对于Windows 2000、Windows XP、Windows 2003的用户需要首先安装.NET Framework 2.0或更高版本方可运行本程序。有关下载和安装的详细信息请参阅“致Windows XP用户.txt”文件。对于Windows Vista、Windows 7及后续用户,可以直接运行本程序。 同时鉴于Windows 8(Windows 8.1、Windows 8.1 Update)、Windows 10系统中默认未包含.NET Framework 2.0,因此新版的程序文件夹内将包含一个DirectX_Repair_win8_win10的特别版程序,该程序功能与通用版相同,基于.NET Framework 4.0开发,可以在Windows8(Windows 8.1、Windows 8.1 Update)、Windows 10系统中直接运行(其他系统如果安装了.NET Framework 4.0也可以运行这个特别版的程序)。

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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