请考虑以下事项:
#include <cassert>
#include <cstdio>
#include <Windows.h>
#include <io.h>
int main(int /*argc*/, char* /*argv*/[]) {
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
//HANDLE handle = (HANDLE)_get_osfhandle(_fileno(stdout)); //or this; doesn't matter
BY_HANDLE_FILE_INFORMATION info;
BOOL okay = GetFileInformationByHandle(handle,&info);
assert(okay!=0);
return 0;
}
此程序中的断言失败,GetLastError()
报告文件句柄无效。这样就无法从info
中提取attributes。
但是,这是推荐的方法。例如(1),(2)。值得注意的是,如果它是物理支持的FILE*
(例如,使用fopen(...)
创建)的句柄, 可以正常工作。
如何在Windows上获取std in / out / err流的属性?
答案 0 :(得分:1)
属性(FILE_ATTRIBUTE_*
)仅存在于FileSystem设备上的文件中。当in / out / err流没有重定向到FileSystem上的文件时 - 在这种情况下没有任何属性。甚至管道也没有属性。所以总的来说 - 你不能得到这个。你在属性下的意思是什么?