0

作为这个问题的后续行动......

现在,我通过用户 j_random_hacker 的评论找到了该问题的答案。这里 Windows 遵循 8.3 文件命名标准意味着 turbo c 只能读取名称长度为 8 个字符且扩展名为 3 个字符的文件。因此,Windows 将为任何不遵循 8.3 命名标准的文件赋予另一个名称。就像在我的情况下,Windows 为HI.TTCN的实际文件名提供了HIBDS~ 1.TTC

现在我的问题是我想在运行时将该文件名作为参数,如下所示

glc hi.ttcn

这里 glc 是我的 .exe 文件,它将检查编码准则违规,hi.ttcn 是要检查的实际 TTCN 文件。所以这里的问题是上面所说的windows给hi.ttcn提供了一些其他的名字所以我的程序无法打开那个文件说“文件名不存在”,因为我给了相同的参数字符串“hi.ttcn”打开。那么如何在运行时为给定的参数字符串获取 Windows 分配的文件名(意味着我想在给出“HI.TTCN”时获取字符串“HIBDS~1.TTC”。)

4

3 回答 3

3

好的,这是描述您需要调用的 Win32 函数的页面:

GetShortPathName 函数

你需要#include <windows.h>在你的程序的顶部,并且可能跳过更多的箍来让它在这样一个旧的编译器上编译(也许 Turbo C 甚至没有附带 Windows 头文件?)祝你好运!

于 2009-02-05T11:16:56.823 回答
2

我相信这是可以做到的,但这很棘手,因为它需要深入研究毛茸茸的 Win32 API 调用。使用现代编译器简单地重新编译会容易得多——有什么理由不能这样做吗?

以下是两个免费的高质量 C/C++ 编译器的链接,它们在处理长文件名时不会遇到任何问题:Microsoft Visual C++ Express Edition明威

于 2009-02-05T10:51:06.283 回答
1

您还可以使用dir /x从命令行获取短文件名

于 2009-02-05T13:12:30.790 回答