|
Alan take a bow! You deserve MVP for that one answer!
Panic, Chaos, Destruction.
My work here is done.
|
|
|
|
|
I never thought it as a hard task as that...... I don't have months to spare for this....
|
|
|
|
|
Any conversion between two formats can be problematic. In most cases the 'owners'of the formats generally provide the API's to convert. IF you are using MS Orifice, you can open HTML files and then save them to rtf; this can be done programatically.
Panic, Chaos, Destruction.
My work here is done.
|
|
|
|
|
Thats a great input for me.... I will go ahead with this....
Thanks a lot
Sebastian
|
|
|
|
|
If you don't mind a few shortcomings, why don't you just try using Word: let it open the HTML document and save as RTF.
Warning: make sure not to have it save any HTML, Word's idea of HTML is a bit fundamentalist.
Luc Pattyn [Forum Guidelines] [My Articles]
The quality and detail of your question reflects on the effectiveness of the help you are likely to get.
Show formatted code inside PRE tags, and give clear symptoms when describing a problem.
|
|
|
|
|
Luc Pattyn wrote: Word's idea of HTML is a bit fundamentalist.
Fundamentalist?? That's too "warm and fuzzy" a description for what Word considers HTML. No, I think "Jihad", "Shock and Awe", "GBU-43/B Massive Ordnance Air Blast bomb", ... those are a bit more accurate.
|
|
|
|
|
I plead guilty.
My preference for understatement goes pale next to your highly accurate politico-military jargon.
BTW: I'm beginning to worry about your long-term MS MVP status now. I wouldn't want to see another one go down and switch to Mac misery.
Luc Pattyn [Forum Guidelines] [My Articles]
The quality and detail of your question reflects on the effectiveness of the help you are likely to get.
Show formatted code inside PRE tags, and give clear symptoms when describing a problem.
|
|
|
|
|
I'm not an MS MVP anymore. I'm spending way too much time with my 15 month old son to keep up on MS's and CodeProject's stuff at the moment.
|
|
|
|
|
Good choice.
And yeah, your sig tricked me.
Luc Pattyn [Forum Guidelines] [My Articles]
The quality and detail of your question reflects on the effectiveness of the help you are likely to get.
Show formatted code inside PRE tags, and give clear symptoms when describing a problem.
|
|
|
|
|
try to put it in a Richtextbox and start from there.
You'll probably have to manually escape the tags and replace them by rtf codes. (Readme's via google).
|
|
|
|
|
Hi
I am trying to read from somewhere in the middle of the file with Binaryreader but I can't.
BinaryReader br = new BinaryReader(MyFileStream);
br.BaseStream.Position = locationtostartreading;
byte[] context = new byte[br.BaseStream.Length - locationtostartreading];
br.Read(context, 0, (int)(br.BaseStream.Length - locationtostartreading));
return Encoding.ASCII.GetString(context);
But it starts reading from beginning whatever I do.
Thanks.
|
|
|
|
|
Hi,
1.
I would expect your code to work fine, although I had the experience once some methods rewind their stream parameter (without such being documented). IIRC Image.FromStream() does.
2.
Why do you need a BinaryReader here? FileStream.Read() would return a byte[] anyway.
Luc Pattyn [Forum Guidelines] [My Articles]
The quality and detail of your question reflects on the effectiveness of the help you are likely to get.
Show formatted code inside PRE tags, and give clear symptoms when describing a problem.
|
|
|
|
|
Maybe your source is not seekable.
byte[] content = new byte[] {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0};
MemoryStream memoryStream = new MemoryStream(content);
BinaryReader reader = new BinaryReader(memoryStream);
byte[] buffer = new byte[6];
reader.BaseStream.Position = 15;
int size = 0;
do {
size += reader.Read(buffer, size, 6 - size);
}
while (size < 6);
|
|
|
|
|
My source is an exe file and I think that should be seekable.
|
|
|
|
|
The code I posted is the correct code for reading from a stream. If the code I posted does not work you have another error that has nothing to do with reading logic.
|
|
|
|
|
I think you have been trying to do this for a couple of days, yes?
I also think you have the wrong idea what a BinaryReader is and what BinaryReader.Read(byte[], int, int) actually does.
A BinaryReader is not intended to read a stream of binary data from a file. It is intended to read primitive types (such as int32, int64 etc) from a file. What you appear to be trying to do needs a straight FileStream or similar.
The BinaryReader.Read(byte[] buffer, int start, int length) reads length bytes into the buffer, starting to fill at buffer[start] - not reads bytes into buffer starting to fill from stream[start].
Search MSDN for BinaryReader; it is all there in English. Or Microsofts' version of English, at least.
No trees were harmed in the sending of this message; however, a significant number of electrons were slightly inconvenienced.
This message is made of fully recyclable Zeros and Ones
|
|
|
|
|
Thank you for your answer. Yes, I've been working on this for couple of days.
I've tried using FileStream too but again got the same result.
Maybe the problem is the method for looking the location of the string in file. Any suggestions on how the find the location of string in file
|
|
|
|
|
Try this:
using (FileStream fs = new FileStream(@"C:\XXTemp\Test.bin", FileMode.Open))
{
if (fs.CanSeek)
{
fs.Seek(0x53, 0);
byte[] buffer = new byte[8];
fs.Read(buffer, 0, 8);
StringBuilder sb = new StringBuilder();
foreach (byte b in buffer)
{
sb.Append((char) b);
}
MessageBox.Show(sb.ToString());
}
}
The StringBuilder stuff is just to display the buffer and show it works byte by byte.
No trees were harmed in the sending of this message; however, a significant number of electrons were slightly inconvenienced.
This message is made of fully recyclable Zeros and Ones
|
|
|
|
|
I just tried your solution too, while debugging at watches it shows that fs's position is the position that I want but it doesn't work that way. It has lots of \0 when converted to string.
|
|
|
|
|
so your string probably uses Unicode, meaning the ASCII character set gets represented by 16-bit numbers with their high byte equal to zero. There are many ways a string can be hidden in an EXE, ASCII and Unicode are the top two.
Luc Pattyn [Forum Guidelines] [My Articles]
The quality and detail of your question reflects on the effectiveness of the help you are likely to get.
Show formatted code inside PRE tags, and give clear symptoms when describing a problem.
|
|
|
|
|
Try it with a known file: Save this page to a temporary file, and replace the c:\XXTemp\Test.bin with that file. Then, change as shown below:
using (FileStream fs = new FileStream(@"C:\XXTemp\CodeProject Reply to Message_ Free source code and programming help.mht", FileMode.Open))
{
if (fs.CanSeek)
{
fs.Seek(0x44, 0);
byte[] buffer = new byte[100];
fs.Read(buffer, 0, 100);
StringBuilder sb = new StringBuilder();
foreach (byte b in buffer)
{
sb.Append((char)b);
}
MessageBox.Show(sb.ToString());
}
}
Note changes in Seek, buffer size and amount read.
When I run this, I get
Reply to Message. Free source code and programming help
Date: Wed, 15 Jul 2009 15:50:47 +0100
MIME
Open your file in Notepad (not by double clicking) and see if what you get in the MessageBox matches the file.
No trees were harmed in the sending of this message; however, a significant number of electrons were slightly inconvenienced.
This message is made of fully recyclable Zeros and Ones
|
|
|
|
|
I write the data to the end of file with this code:
public bool AppendToBinary(string File, string strToAppend)
{
FileStream fs = null;
BinaryWriter bw = null;
try { fs = new FileStream(File, FileMode.Open, FileAccess.ReadWrite); }
catch { throw new Exception("Dosya akışı oluşturulurken hata oluştu."); }
try { bw = new BinaryWriter(fs); }
catch { throw new Exception("Binary okuyucu oluşturulurken hata oluştu."); }
try
{
bw.Seek(0, SeekOrigin.End);
bw.Write(strToAppend);
}
catch { throw new Exception("Dosyaya yazılırken hata oluştu."); }
finally { bw.Close(); fs.Close(); fs.Dispose(); }
return true;
}
I get the location of the desired string in file with this code:
public long DigBinary(string File, string strToDig)
{
FileStream fs = null;
try { fs = new FileStream(File, FileMode.Open, FileAccess.Read); }
catch { throw new Exception("Dosya akışı oluşturulamadı."); }
try
{
byte[] icerik = new byte[fs.Length];
fs.Read(icerik, 0, (int)fs.Length);
string asText = Encoding.UTF8.GetString(icerik);
int index = asText.IndexOf(strToDig);
if (index == -1)
return -1;
if (strToDig != asText.Substring(index, strToDig.Length))
return -2;
return index;
}
catch { throw new Exception("Dosya okunurken hata oluştu."); }
finally { fs.Close(); fs.Dispose(); }
}
I try to read data from the desired location of file to the end with this method: But it doesn't work...
public string ReadBinary(string File, long origin)
{
FileStream fs = null;
try { fs = new FileStream(File, FileMode.Open, FileAccess.Read); }
catch { throw new Exception("Dosya akışı oluşturulamadı."); }
StringBuilder sb = new StringBuilder();
try
{
if (fs.CanSeek)
{
fs.Seek(origin, 0);
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, (int)fs.Length);
foreach (byte b in buffer)
{
try
{
sb.Append((char)b);
}
catch { };
}
MessageBox.Show(sb.ToString());
}
return sb.ToString();
}
catch { throw new Exception("Dosya okunurken hata oluştu."); }
finally { fs.Close(); fs.Dispose(); }
}
|
|
|
|
|
The bits I mentioned about BinaryReader working with primitives also applies to BinaryWriter.
Replace that with a fileStream, and it should work. If in doubt, look at your file content with a hex editor / viewer - I use PSPad which is freeware and available from PSPad[^] This will confirm you have the correct data written at the correct address.
No trees were harmed in the sending of this message; however, a significant number of electrons were slightly inconvenienced.
This message is made of fully recyclable Zeros and Ones
|
|
|
|
|
I am using HexWorkshop as my hex editor and I could see the string that I wrote to the end of file but I wasn't checked that if my application find the correct location and apparently it wasn't finding the correct location so I should be working on my DigBinary method.
|
|
|
|
|
Hi Guys,
I have been trying to implement the KeyPress event on a listView so that when i use the DELETE key, i will delete the selected rows (MultiSelect=true)
The code works fine when i use a button to call it from :
private void btnDeleteRow_Click(object sender, EventArgs e)
{
while (listView1.SelectedIndices.Count > 0)
{
listView1.Items.RemoveAt(listView1.SelectedIndices[0]);
}
}
However in MSDN documentation it is explicitly said that e.KeyChar can't be used for DELETE and several other special function keys like F1-F12 , PageUp etc...
http://msdn.microsoft.com/en-us/library/system.windows.forms.keypresseventargs.keychar.aspx[^]
How can i use the DELETE KEY to delete items in listViews?
Kind regards,
Alex
“Be the change you want to see in the world.”
|
|
|
|
|