有人告诉我,如果你在所有搜索结果的谷歌第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!
答案 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
我不喜欢使用手柄和操纵其他窗户,但可以随意尝试。
希望这有帮助