这是我检查特定文本文件中的文件扩展名的方式吗?

发布于 2024-12-12 05:00:54 字数 297 浏览 0 评论 0原文

您好,我正在尝试实现一种方法来检查特定文本文件中的文件扩展名,下面的代码似乎没有达到我想要的效果,但我想知道这是否是执行此操作的正确方向。如果不是的话,有什么库可以让我用尽可能少的代码来完成此操作。

string fn = ".txt";
if(fn.substr(fn.find_last_of(".") + 1) == ".txt") {
    fprintf(stderr,"yes");
} else {
    fprintf(stderr,"no");
}

我使用的是 Windows 7 32 位

Hello I'm trying to implement a way too check a file extension in a specific text file the code below doesn't seem to do what I want but I was wondering if this is somewhat the right direction to take in doing this. if not what library are there that would allow me to do this in as less code as possible.

string fn = ".txt";
if(fn.substr(fn.find_last_of(".") + 1) == ".txt") {
    fprintf(stderr,"yes");
} else {
    fprintf(stderr,"no");
}

im on windows 7 32bit

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

伤痕我心 2024-12-19 05:00:54

我首选的解决方案是 boost::filesystem,正如减号所示,
但如果不是:

static std::string const targetExtension( ".txt" );
if ( filename.size() >= targetExtension.size()
        && std::equal( filename.end() - targetExtension.size(),
                       filename.end(),
                       targetExtension.begin() ) ) {
    std::cerr << "yes";
} else {
    std::cerr << "no";
}

这对我来说似乎是最简单的。

My preferred solution would be boost::filesystem, as minus suggests,
but if not:

static std::string const targetExtension( ".txt" );
if ( filename.size() >= targetExtension.size()
        && std::equal( filename.end() - targetExtension.size(),
                       filename.end(),
                       targetExtension.begin() ) ) {
    std::cerr << "yes";
} else {
    std::cerr << "no";
}

This would seem the simplest to me.

自控 2024-12-19 05:00:54

fn.substr(fn.find_last_of(".") + 1) 返回不带点的 "txt"。因此,要么从 substr 中删除 +1,要么与不带点的 "txt" 进行比较。

fn.substr(fn.find_last_of(".") + 1) returns "txt" without the dot. So either remove +1 from substr or compare with "txt" without the dot.

命比纸薄 2024-12-19 05:00:54

如果您只需要在 Windows 上工作,最好的解决方案是使用 Win32 API PathMatchSpec

对于您的示例:

string fn = ".txt";
if(PathMatchSpecA(fn.c_str(), "*.txt") {
    fprintf(stderr,"yes");
} else {
    fprintf(stderr,"no");
}

或作为函数:

BOOL HasTxtFileExtension(LPCSTR filename)
{
    return PathMatchSpecA(filename, "*.txt");
}

正如预期的那样,该函数不区分大小写,并正确处理目录包含点但文件不包含点的情况,例如 C:\\directory.with.dots\ \testtxt

If you only need this to work on Windows, the best solution is to use the Win32 API PathMatchSpec.

For your example:

string fn = ".txt";
if(PathMatchSpecA(fn.c_str(), "*.txt") {
    fprintf(stderr,"yes");
} else {
    fprintf(stderr,"no");
}

Or as a function:

BOOL HasTxtFileExtension(LPCSTR filename)
{
    return PathMatchSpecA(filename, "*.txt");
}

As would be expected, this function is case-insensitive and correctly handles the case where the directory contains dots but the file does not, e.g. C:\\directory.with.dots\\testtxt.

鹿! 2024-12-19 05:00:54

我认为 boost 文件系统库应该对你有帮助(扩展路径功能)。

http://www.boost.org/doc/libs/release /libs/filesystem/index.html

I think boost filesystem library should help you (extension path function).

http://www.boost.org/doc/libs/release/libs/filesystem/index.html

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文