首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WriteFile和WriteConsole

WriteFile和WriteConsole
EN

Stack Overflow用户
提问于 2013-06-28 14:35:33
回答 1查看 1.1K关注 0票数 2

我希望能够使用WriteFileWriteConsole,因此以下三个函数可以工作:

代码语言:javascript
复制
> Output.exe
> Output.exe > File.txt & type File.txt
> for /F "tokens=*" %A in ('Output.exe') do @echo %A

我设法让前两个代码使用我的当前代码。但是现在for循环输出:The system cannot write to the specified device.

我想它不喜欢我的BOM。如何使我的代码与for循环一起工作?

这是我目前的密码。

代码语言:javascript
复制
DWORD   dwBytesWritten;
DWORD   dwConMode;
BOOL    bRedirectedToFile;
WCHAR   str[] = L"Hello World";

bRedirectedToFile = !GetConsoleMode(hStdOut, &dwConMode);

if (bRedirectedToFile)
{
    LONG  zero = 0;
    DWORD pos  = SetFilePointer(hStdOut, 0, &zero, FILE_CURRENT);

    if (pos == 0)
    {
        WORD Unicode = ((BYTE*)L"A")[0] == 0 ? 0xfffe : 0xfeff;
        WriteFile(hStdOut, &Unicode, 2, &dwBytesWritten, 0);
    }

    WriteFile(hStdOut, str, lstrlen(str) * sizeof(WCHAR), &dwBytesWritten, 0);
}
else
{
    WriteConsole(hStdOut, str, lstrlen(str), &dwBytesWritten, 0);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-28 15:25:08

我测试了wprintf的输出,它似乎在打印字符串之前将字符串转换为ASCII。

因此,目前可接受的解决办法:

  1. str转换为ASCII
  2. str打印WriteFile

代码也简单得多。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17367231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档