-4

当我在使用 dirent.h 时遇到问题时,不得不在 Turbo C++ 中为学校项目做一些遗留编码

#include <dirent.h>
#include <stdio.h>
#include <iostream.h>

void ls(char *searchstring)
{
 DIR *directory_list;
 struct dirent *dentry;
 directory_list = opendir (searchstring);
 if (directory_list != NULL)
 {
  while ((dentry = readdir (directory_list)) != NULL)
  {
   cout << dentry->d_name << endl;
  }
 }
  closedir (directory_list);
}

void main()
{
 char searchstring[128];
 gets(searchstring);
 cout << "list of files under " << searchstring;
 ls(searchstring);
}

理想情况下,此代码应列出目录中的所有文件和文件夹名称。但我明白了:

但我明白了 似乎该d_name字段似乎没有存储大于 9 个字符(包括 null)的文件名,而是用 '~' 和一个数字截断它。

我在 dirent 结构中阅读了有关字符串的 NAME_MAX 绑定长度的内容,但我在网络上的任何地方都找不到有关它的更多信息。

我想要完整的文件和文件夹名称,对不起,我必须使用古老的 Turbo C++。

4

1 回答 1

1

似乎 d_name 字段似乎没有存储大于 9 个字符(包括 null)的文件名,而是用 '~' 和数字截断它。

是的,这就是 Windows 文件系统条目如何处理 Windows 95 及更高版本的 Windows 版本中出现的长文件名的向后兼容性。

Turbo C++ 编译器使用旧标准,允许文件名最多包含 8 个字符、一个点 ( .) 和最多 3 个字符扩展名。

我想要完整的文件和文件夹名称,对不起,我必须使用古老的 Turbo C++。

如果您绑定到 Turbo C++ 支持的功能,则无法使用编译器提供的本机函数。

您可以尝试自己在低级别编写文件系统接口,但值得怀疑。

于 2016-12-02T06:28:11.527 回答