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

时间:2014-02-17 07:37:44

标签: c++ file winapi delete-file

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

void deleteFiles( WCHAR file[] )
{
  // WCHAR file[] is actually the directory path. i.e C:\Users\TheUser\Desktop\Folder\

  // Convert from WCHAR to char for future functions
  char filePath[ MAX_PATH ];
  int i;
  for( int i = 0; file[ i ] != '\0'; 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 ] = '\0';

  // 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 );
}

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

2 个答案:

答案 0 :(得分:2)

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

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

因为在循环外定义的那个是未初始化的,当你使用它作为索引来终止路径时,它的值是不确定的,你有未定义的行为。

答案 1 :(得分:2)

首先,将WCHARs转换为char不是一个好主意,因为路径可能包含Unicode字符,您将收到错误。

第二件事是,要使FindFirstFile生效,您需要添加通配符,例如C:\Path\*

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