具有长文件路径的 MCIWindow
MCIWindow with long file path
我在我的项目中遇到过一个场景,我正在创建一个 MCI window 来播放一些视频,其中当有一个文件路径传递给它时它无法正确播放长度超过 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] start\n";
if ( MCIWndPlay( m_window ) != 0 )
{
logStream().E() << "VideoMedia::play " << "\n";
}
logStream().I() << "[VideoMedia::play] end\n";
return true;
}
在我使用长度 < 128 的 shortPath
创建 m_window
的情况下,媒体显示和播放一切正常。但是,对于长度 > 128 的 shortPath
,不会播放任何媒体。有趣的是,在上面的 VideoMedia::play()
函数中,日志表明 MCIWndPlay()
调用执行正常,因为没有看到 if 内部的错误日志。
我想知道这是否只是 MCIWnd 不支持长文件路径的情况,尽管我在文档中没有看到任何暗示这种情况的内容?
通过查看文档 here,它说:
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 个字符限制。
我在我的项目中遇到过一个场景,我正在创建一个 MCI window 来播放一些视频,其中当有一个文件路径传递给它时它无法正确播放长度超过 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] start\n";
if ( MCIWndPlay( m_window ) != 0 )
{
logStream().E() << "VideoMedia::play " << "\n";
}
logStream().I() << "[VideoMedia::play] end\n";
return true;
}
在我使用长度 < 128 的 shortPath
创建 m_window
的情况下,媒体显示和播放一切正常。但是,对于长度 > 128 的 shortPath
,不会播放任何媒体。有趣的是,在上面的 VideoMedia::play()
函数中,日志表明 MCIWndPlay()
调用执行正常,因为没有看到 if 内部的错误日志。
我想知道这是否只是 MCIWnd 不支持长文件路径的情况,尽管我在文档中没有看到任何暗示这种情况的内容?
通过查看文档 here,它说:
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 个字符限制。