MCIWindow 与长文件路径

MCIWindow with long file path

本文关键字:路径 文件 MCIWindow      更新时间:2023-10-16

>我在项目中遇到了一个场景,我正在创建一个 MCI 窗口以播放一些视频,其中当有一个超过 128 个字符长的文件路径传递给它时,它无法正确播放。

我正在创建一个新的 MCIWindow,如下所示:

m_window = MCIWndCreate( _owner, GetModuleHandle(NULL), WS_CHILD|MCIWNDF_NOERRORDLG|MCIWNDF_NOPLAYBAR|MCIWNDF_NOMENU, shortPath.c_str() );

稍后将通过执行以下操作来播放它:

bool VideoMedia::play() 
{
    logStream().I() << "[VideoMedia::play] startn";
    if ( MCIWndPlay( m_window ) != 0 )
    {
        logStream().E() << "VideoMedia::play " << "n";
    }
    logStream().I() << "[VideoMedia::play] endn";
    return true;
}

在我使用长度为 <128 的shortPath创建m_window的情况下,在媒体显示和播放的情况下,一切都很好。但是,对于长度> 128 的shortPath,不会播放任何媒体。 有趣的是,在上面的VideoMedia::play()函数中,日志指示MCIWndPlay()调用执行正常,因为看不到 if 内部的错误日志。

我想知道这是否只是 MCIWnd 无法支持长文件路径的情况,尽管我在文档中没有看到任何表明是这种情况?

通过查看此处的文档,它说:

NOTE: MCI device has a path-length limit of 128 characters! If your media files are buried inside the nested subfolders and the path is longer than 128 characters, your media won't play.

因此,唯一真正的解决方案是确保路径不会大于它出现的 128 个字符限制。