473,383 Members | 1,879 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,383 software developers and data experts.

Replacing a Filestream with a Memorystream

Hi all !

This message has been posted on .net.general, but I reposts it here due to lack of replies.

This is my first day with Visual Studio and C#, and I'm trying to send "raw data" to the printer
port. I found the SendFileToPrinter example below in a knowledge base at MS site
It works, but I need to replace the filestream with a memorystream cause there's no need to write
files and then load them again just to print.

So I rewrote the procedure and the call. The problem is of course that it dosen't work. If I replace
the MemoryStream (with FileStream) in btnPrint event, and save the result to a file it's ok. I can
copy the file directly to the port, and the printer prints ok. I know that I'm doing something wrong
in my version of the SendDocToPrinter procedure, but I don't know what. Any help are greatly
appreciated.

TIA
Best wishes
Kai Bohli
Norway

<My call to the SendDocToPrinter procedure>
private void btnPrint2_Click(object sender, System.EventArgs e)
{
PrintDialog pd = new PrintDialog();
pd.PrinterSettings = new PrinterSettings();
if (DialogResult.OK == pd.ShowDialog(this))
{
MemoryStream memStrm = new MemoryStream();
StreamWriter sw = new StreamWriter(memStrm);
sw.WriteLine("\x02L");
sw.WriteLine("H07");
sw.WriteLine("D11");
sw.WriteLine("19110080100002510K OHM 1/4 WATT");
sw.WriteLine("1a6210000000050590PCS");
sw.WriteLine("E");
sw.WriteLine("");

LabelPrint.SendDocToPrinter(pd.PrinterSettings.Pri nterName,memStrm);
sw.Close();
}

</My call to the SendDocToPrinter procedure>

<My converted version>
public static bool SendDocToPrinter( string szPrinterName, MemoryStream ms)
{ // just the lines that I've changed are present here.
BinaryReader br = new BinaryReader(ms);
Byte []bytes = new Byte[ms.Length];
nLength = Convert.ToInt32(ms.Length);

</My converted version>
<Orginal kb code>
public static bool SendFileToPrinter( string szPrinterName, string szFileName )
{
// Open the file.
FileStream fs = new FileStream(szFileName, FileMode.Open);
// Create a BinaryReader on the file.
BinaryReader br = new BinaryReader(fs);
// Dim an array of bytes big enough to hold the file's contents.
Byte []bytes = new Byte[fs.Length];
bool bSuccess = false;
// Your unmanaged pointer.
IntPtr pUnmanagedBytes = new IntPtr(0);
int nLength;

nLength = Convert.ToInt32(fs.Length);
// Read the contents of the file into the array.
bytes = br.ReadBytes( nLength );
// Allocate some unmanaged memory for those bytes.
pUnmanagedBytes = Marshal.AllocCoTaskMem(nLength);
// Copy the managed byte array into the unmanaged array.
Marshal.Copy(bytes, 0, pUnmanagedBytes, nLength);
// Send the unmanaged bytes to the printer.
bSuccess = SendBytesToPrinter(szPrinterName, pUnmanagedBytes, nLength);
// Free the unmanaged memory that you allocated earlier.
Marshal.FreeCoTaskMem(pUnmanagedBytes);
return bSuccess;
}
</Orginal kb codep>

Best wishes
Kai Bohli
ka***********@online.no
Norway
Best wishes
Kai Bohli
ka***********@online.no
Norway
Nov 15 '05 #1
4 9167
Hi Kai,

Did you set memorystream's Position to 0 before processing it?

--
Miha Markic [MVP C#] - RightHand .NET consulting & development
miha at rthand com
www.rthand.com

"Kai Bohli" <ka****@online.nospam> wrote in message
news:kn********************************@4ax.com...
Hi all !

This message has been posted on .net.general, but I reposts it here due to lack of replies.
This is my first day with Visual Studio and C#, and I'm trying to send "raw data" to the printer port. I found the SendFileToPrinter example below in a knowledge base at MS site It works, but I need to replace the filestream with a memorystream cause there's no need to write files and then load them again just to print.

So I rewrote the procedure and the call. The problem is of course that it dosen't work. If I replace the MemoryStream (with FileStream) in btnPrint event, and save the result to a file it's ok. I can copy the file directly to the port, and the printer prints ok. I know that I'm doing something wrong in my version of the SendDocToPrinter procedure, but I don't know what. Any help are greatly appreciated.

TIA
Best wishes
Kai Bohli
Norway

<My call to the SendDocToPrinter procedure>
private void btnPrint2_Click(object sender, System.EventArgs e)
{
PrintDialog pd = new PrintDialog();
pd.PrinterSettings = new PrinterSettings();
if (DialogResult.OK == pd.ShowDialog(this))
{
MemoryStream memStrm = new MemoryStream();
StreamWriter sw = new StreamWriter(memStrm);
sw.WriteLine("\x02L");
sw.WriteLine("H07");
sw.WriteLine("D11");
sw.WriteLine("19110080100002510K OHM 1/4 WATT");
sw.WriteLine("1a6210000000050590PCS");
sw.WriteLine("E");
sw.WriteLine("");

LabelPrint.SendDocToPrinter(pd.PrinterSettings.Pri nterName,memStrm);
sw.Close();
}

</My call to the SendDocToPrinter procedure>

<My converted version>
public static bool SendDocToPrinter( string szPrinterName, MemoryStream ms) { // just the lines that I've changed are present here.
BinaryReader br = new BinaryReader(ms);
Byte []bytes = new Byte[ms.Length];
nLength = Convert.ToInt32(ms.Length);

</My converted version>
<Orginal kb code>
public static bool SendFileToPrinter( string szPrinterName, string szFileName ) {
// Open the file.
FileStream fs = new FileStream(szFileName, FileMode.Open);
// Create a BinaryReader on the file.
BinaryReader br = new BinaryReader(fs);
// Dim an array of bytes big enough to hold the file's contents.
Byte []bytes = new Byte[fs.Length];
bool bSuccess = false;
// Your unmanaged pointer.
IntPtr pUnmanagedBytes = new IntPtr(0);
int nLength;

nLength = Convert.ToInt32(fs.Length);
// Read the contents of the file into the array.
bytes = br.ReadBytes( nLength );
// Allocate some unmanaged memory for those bytes.
pUnmanagedBytes = Marshal.AllocCoTaskMem(nLength);
// Copy the managed byte array into the unmanaged array.
Marshal.Copy(bytes, 0, pUnmanagedBytes, nLength);
// Send the unmanaged bytes to the printer.
bSuccess = SendBytesToPrinter(szPrinterName, pUnmanagedBytes, nLength);
// Free the unmanaged memory that you allocated earlier.
Marshal.FreeCoTaskMem(pUnmanagedBytes);
return bSuccess;
}
</Orginal kb codep>

Best wishes
Kai Bohli
ka***********@online.no
Norway
Best wishes
Kai Bohli
ka***********@online.no
Norway

Nov 15 '05 #2
Thanks for your reply Miha,it's really appreciated.

I didn't do that. I've tried it now like this:
memStrm.Position = 0;
LabelPrint.SendDocToPrinter(pd.PrinterSettings.Pri nterName,memStrm);

or should I set the position to 0 before I start writing with the StreamWriter ?

I couldn't get it to work. The thing here is that I'm writing to a labelprinter and that thing is
touchy about getting linefeeds after each command etc. The memorystream must do something that the
filestream dosen't.
On Sun, 8 Feb 2004 09:59:57 +0100, "Miha Markic [MVP C#]" <miha at rthand com> wrote:
Hi Kai,
Did you set memorystream's Position to 0 before processing it?

Best wishes
Kai Bohli
ka***********@online.no
Norway
Nov 15 '05 #3
Hi Kai,

After you've finished writting to StreamWriter make sure you invoke its
Flush method.
sw.WriteLine...
sw.Flush();
ms.Position = 0;
--
Miha Markic [MVP C#] - RightHand .NET consulting & development
miha at rthand com
www.rthand.com

"Kai Bohli" <ka****@online.nospam> wrote in message
news:8n********************************@4ax.com...
Thanks for your reply Miha,it's really appreciated.

I didn't do that. I've tried it now like this:
memStrm.Position = 0;
LabelPrint.SendDocToPrinter(pd.PrinterSettings.Pri nterName,memStrm);

or should I set the position to 0 before I start writing with the StreamWriter ?
I couldn't get it to work. The thing here is that I'm writing to a labelprinter and that thing is touchy about getting linefeeds after each command etc. The memorystream must do something that the filestream dosen't.
On Sun, 8 Feb 2004 09:59:57 +0100, "Miha Markic [MVP C#]" <miha at rthand

com> wrote:
Hi Kai,
Did you set memorystream's Position to 0 before processing it?

Best wishes
Kai Bohli
ka***********@online.no
Norway

Nov 15 '05 #4
Hi Miha !

That did it ! It seem that I have to send sw.Flush after each command though. You're my hero !
Thank you, thank you, thank you ! :)

On Sun, 8 Feb 2004 12:24:56 +0100, "Miha Markic [MVP C#]" <miha at rthand com> wrote:
Hi Kai,

After you've finished writting to StreamWriter make sure you invoke its
Flush method.
sw.WriteLine...
sw.Flush();
ms.Position = 0;


Best wishes
Kai Bohli
ka***********@online.no
Norway
Nov 15 '05 #5

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

7
by: Toby Mathews | last post by:
Hi, In an ASP.Net application I want to convert open create a FileStream object from a System.Drawing.Image - is this possible? I create an instance of an Image object using the FromFile method,...
2
by: Michel Racicot | last post by:
Hi there, I need to know what is the fastest way to copy a 9mb FileStream into a MemoryStream? Must I read a big buffer then writting it in my MemoryStream or is it a better way? Thank you
2
by: Kai Bohli | last post by:
Hi all ! This is my first day with Visual Studio and C#, and I'm trying to send "raw data" to the printer port. I found the SendFileToPrinter example below in a knowledge base at MS site It...
5
by: Chris Fink | last post by:
How do I load a string into a FileStream without going to disk? For example, string abc = "This is a string"; How do I load abc into a FileStream? FileStream input = new FileStream(.....);
3
by: sbparsons | last post by:
I have a file opened as a FileStream. I have a StreamReader and StreamWriter object opened, referencing the FileStream object. My aim is to read lines from the file until I find the line where...
12
by: Adam J. Schaff | last post by:
I am writing a quick program to edit a binary file that contains file paths (amongst other things). If I look at the files in notepad, they look like: ...
1
by: pgmfan | last post by:
What is the difference among filestream, memoryStream and byte stream, how do i use each properly. i confused by them appreciate for any advice ,please help
1
by: ad | last post by:
I do know how to convert a FileStream to MemoryStream. Could somebody help me?
3
by: paradigmshift | last post by:
I am looking at how to move data from a file to a memory stream. This data will be needed many times over and over so i don't want to have to rely on the system to keep the information cashed for...
1
by: CloudSolutions | last post by:
Introduction: For many beginners and individual users, requiring a credit card and email registration may pose a barrier when starting to use cloud servers. However, some cloud server providers now...
0
by: Faith0G | last post by:
I am starting a new it consulting business and it's been a while since I setup a new website. Is wordpress still the best web based software for hosting a 5 page website? The webpages will be...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 3 Apr 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome former...
0
by: ryjfgjl | last post by:
In our work, we often need to import Excel data into databases (such as MySQL, SQL Server, Oracle) for data analysis and processing. Usually, we use database tools like Navicat or the Excel import...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: aa123db | last post by:
Variable and constants Use var or let for variables and const fror constants. Var foo ='bar'; Let foo ='bar';const baz ='bar'; Functions function $name$ ($parameters$) { } ...
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.