如何在 c++ 中删除给定目录中的所有文本文件

How to delete all text files from given directory in c++

本文关键字:文件 文本 c++ 删除      更新时间:2023-10-16

我正在尝试弄清楚如何从给定目录中删除所有文本文件。我正在使用Visual c ++ 2010 express,使用winapi。如果您知道文件的确切名称,我知道如何删除该文件,但我想删除该目录中的所有文本文件。这是我的最新尝试:

void deleteFiles( WCHAR file[] )
{
  // WCHAR file[] is actually the directory path. i.e C:UsersTheUserDesktopFolder
  // Convert from WCHAR to char for future functions
  char filePath[ MAX_PATH ];
  int i;
  for( int i = 0; file[ i ] != ''; i++ )
  {
    // Cycle through each character from the array and place it in the new array
    filePath[ i ] = file[ i ];
  }
  // Place the null character at the end
  filePath[ i ] = '';
  // Generate WIN32_FIND_DATA struct and FindFirstFile()
  WIN32_FIND_DATA fileData;
  FindFirstFile( file, &fileData );
  // Display the filename
  MessageBox( NULL, fileData.cFileName, L"Check", MB_OK );
}

消息框仅显示所选文件夹,而不显示文件名。为什么会这样?

一个微妙的问题是你有两个具有相同名称和不同范围的变量:一个在循环外部定义,另一个未初始化;另一个在循环内声明。

我所指的变量是名为 i 的变量。

由于在循环外部定义的路径未初始化,因此当您将其用作终止路径的索引时,其值是不确定的,并且具有未定义的行为。

首先,将WCHARs转换为char不是一个好主意,因为路径可能包含 Unicode 字符,并且会出现错误。

第二件事是,要使FindFirstFile工作,您需要添加通配符,例如 C:Path* .

下面是 MSDN 上枚举目录中文件的示例:http://msdn.microsoft.com/en-us/library/windows/desktop/aa365200%28v=vs.85%29.aspx