WPF从内存中的字节数组创建一个txt文件,并用记事本打开它

时间:2016-07-13 11:57:43

标签: c# wpf wcf

有人告诉我,如果你在所有搜索结果的谷歌第3页上几乎不可能做到这一点,但这应该非常简单。
我从WCF收到一个字节数组,我想将其转换为txt文件。问题是,我想使用WPF中的按钮打开它们,而无需在客户端硬盘驱动器上写入该文件的副本。如果有必要,用户可以直接从记事本本地保存 所有文件都非常小(高达100kb),因此RAM不应受到影响 谢谢你的所有答案!我会在这里公布结果,以防将来有人需要它! _______________________________________________________________________________
创建一个新类:NotePadHelper(包括System.Runtime.InteropServices;)

public class NotePadHelper
{
    [DllImport("user32.dll", EntryPoint = "SetWindowText")]
    private static extern int SetWindowText(IntPtr hWnd, string text);

    [DllImport("user32.dll", EntryPoint = "FindWindowEx")]
    private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

    [DllImport("User32.dll", EntryPoint = "SendMessage")]
    private static extern int SendMessage(IntPtr hWnd, int uMsg, int wParam, string lParam);

    public static void ShowMessage(string message = null, string title = null)
    {
        Process notepad = Process.Start(new ProcessStartInfo("notepad.exe"));
        if (notepad != null)
        {
            notepad.WaitForInputIdle();

            if (!string.IsNullOrEmpty(title))
                SetWindowText(notepad.MainWindowHandle, title);

            if (!string.IsNullOrEmpty(message))
            {
                IntPtr child = FindWindowEx(notepad.MainWindowHandle, new IntPtr(0), "Edit", null);
                SendMessage(child, 0x000C, 0, message);
            }
        }
    }
}

现在您需要将字节数组转换为字符串并在记事本中显示Doc

var str = System.Text.Encoding.Default.GetString(docObject.Image);
                NotePadHelper.ShowMessage(str, docObject.Name);

谢谢@keyboardP和@PInvoke!

1 个答案:

答案 0 :(得分:0)

这真的可以做到。它只是一点工作。 首先,您需要获得byte[]的字符串。 这很简单:

string text = System.Text.Encoding.UTF8.GetString(byteArray);

现在您需要做的就是打开Notepad并将该文字写入其中......

那么在许多常见程序中会发生什么,在后台创建本地副本以防止潜在的数据损失。

我会建议做同样的事情。只需写入文件(在临时目录中),保存路径并打开它。

//To Save to a file:
string tempPath = Path.Combine(Path.GetTempPath(), fileName);
File.WriteAllText(tempPath, text);
//Now open the file you just created:
Process.Start(tempPath);

假设用户将其保存在其他路径上,您可以自由删除临时文件。

如果您想尝试写入记事本,请点击此处获取详细信息:

Open Notepad and add Text not working

我不喜欢使用手柄和操纵其他窗户,但可以随意尝试。

希望这有帮助