我有一个程序,用直接显示抓取视频。我的问题是我希望保存的视频有时间作为名称。以下是我所做的:
CoInitialize(NULL);
CComPtr<IGraphBuilder> graph;
graph.CoCreateInstance(CLSID_FilterGraph);
time_t rawtime;
struct tm * timeinfo;
time (&rawtime);
timeinfo = localtime (&rawtime);
wchar_t pathstuff[50];
swprintf(pathstuff, L"D:\\BMDvideos\\%hs.avi", asctime(timeinfo));
LPCOLESTR x = pathstuff;
HRESULT hr = BuilGraph(graph,x);
..........
这不管用,知道我怎么做吗?
最佳答案
格式化时间的函数是strftime
,因此您可以
类似于:
char filename[1000];
size_t l = strftime( filename,
sizeof(filename),
"D:/BMDvideos/%Y-%m-%dT%Hh%Mm%S.avi",
timeinfo );
assert( l != 0 );
几点评论:
不需要宽字符文件名。他们不是
标准的,不被广泛支持的。(通用标准
Unicode文件名是UTF-8,它在任何地方都可以工作。在
事实上,您不希望在
程序)
不能使用任何标准格式函数,如
asctime
,因为他们几乎肯定会在时间格式和冒号是文件名中的非法字符
在窗户下面。你必须自己指定确切的格式,
使用
':'
。可能还有很多其他的字符你应该避免
也。我倾向于把我的文件名限制在字母数字上,
下划线、连字符和点,我对
连字符的可移植性,或具有多个点的名称。如果
名字不是供人用的,我只是用
strftime
,没有分隔符。最后,使用ISO订单(年、月,
日期),因为这意味着字典排序。
对应于日期上的排序。
编辑:
既然你说你必须使用
"%Y%m%d%H%M%S"
文件名一个非常糟糕的策略):您仍然可以使用上面的方法生成
文件名,然后使用
wchar_t
。关于c++ - 获取时间作为文件名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15063396/