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

Posted

技术标签:

【中文标题】如何从c ++中的给定目录中删除所有文本文件【英文标题】:How to delete all text files from given directory in c++ 【发布时间】:2014-02-17 07:37:44 【问题描述】:

我试图弄清楚如何从给定目录中删除所有文本文件。我正在使用 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 );

消息框只显示被选中的文件夹,而不是文件名。为什么会这样?

【问题讨论】:

如果不使用,为什么要声明“filePath”? 这是我之前尝试过的不同解决方案。我想我忘了把它拿出来。 【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

以上是关于如何从c ++中的给定目录中删除所有文本文件的主要内容,如果未能解决你的问题,请参考以下文章

写一个Linux C程序,将一个文本文件中的所有小写字母转换为大写字母。

[C#][转载]如何删除目录中的所有文件和文件夹

如何替换目录中所有文件名中的字符串? (特别是我需要从目录中的所有文件名中删除“\#015”

如何从 iOS 的文档目录中复制所有文本文件?

从文件路径中删除第一个目录组件

VB中读入文件,如何获得文本的行数