|
How can I disable or enable the TCP/IP port using C#?
Thank you!
|
|
|
|
|
use the blocksocket function
|
|
|
|
|
Hey ya'll,
I'm trying to find if a file is a valid image file by;
try
{
Image img = Image.FromFile(str);
}
catch
{
Continue on with biz
}
And when it encounters a non-image file it throws and OutOfMemory exception as described in docs.
My question;
Is there another way to check if valid image file besides;
if (gif or png or jgp or......)
img = ......
After I make this call the app crashes at some point telling me theres memory corruption somewhere. I've narrowed it down to this try/catch block.
Thanks,
Mike
Life is not measured by the number of breaths we take, but by the
moments that take our breath away. "George Carlin"
|
|
|
|
|
Hi,
you can check the file extension; or you can read the first 1024 bytes and look for
specific values (eye catchers) that exist in most of the image formats. These checks,
although a bit ugly and different for each format, will help you in rejecting files
that do not contain image information at all, leaving only image candidates.
But then there could be bad image files, damaged JPEGs and the like. I know of no
general way to detect these, other than trying to load them.
So I would combine all the above, so the try-catch only serves to deal with bad
image files.
|
|
|
|
|
Hey Luc,
Thanks for the quick response, much ablidged!
I was afraid that would be the answer but inquiring minds want to know!
Thanks,
Mike
Life is not measured by the number of breaths we take, but by the
moments that take our breath away. "George Carlin"
|
|
|
|
|
You're welcome.
|
|
|
|
|
Luc,
Took your suggestion (kinda) and used regular expressions. Now I just have to get the extensions for all valid image files.
Regex r = new Regex(@"\b\.bmp\b|\b\.png\b|\b\.jpg\b|\b\.jpeg\b|\b\.gif\b");
Match m = r.Match(str);
if (m.Success)
{
img = Image.FromFile(str);
etc.
}
Works like a charm,
Mike
Life is not measured by the number of breaths we take, but by the
moments that take our breath away. "George Carlin"
|
|
|
|
|
Hi Mike,
I do have three comments on this:
1. file names can be case insensitive (Windows) or sensitive (Unix)
2. there are more image extensions (.TIF, .WMF, .EMF), and the list may grow
3. what if a file holds a valid image but does not carry the appropriate extension?
|
|
|
|
|
Luc Pattyn wrote: 1. file names can be case insensitive (Windows) or sensitive (Unix)
2. there are more image extensions (.TIF, .WMF, .EMF), and the list may grow
3. what if a file holds a valid image but does not carry the appropriate extension?
Hey Luc,
Thanks again for your time.
#1 I addressed by modifying the Regex expression to include insensitivity;
Regex r = new Regex(@"(?i-)(\b\.bmp\b|\b\.png\b|\b\.jpg\b|\b\.jpeg\b|\b\.gif\b)");
#2 I had thought about adding the ones I knew of and letting user add to list?
#2-3 I guess just try it and if it fails don't load?
This is for an article I'm going to submit here shortly. Its a Clipboard spy demo that shows what can be done and how to do it. The main thing I'm trying to convey is the formats, how to retrieve the data, etc.. But I do intend on extending it for another project i'm working on and will need the functionality you mention. But I'm not going to address it for the article.
I have these things locked somewhere in the back of the ole cranium for future reference.
Input always appreciated,
Mike
Life is not measured by the number of breaths we take, but by the
moments that take our breath away. "George Carlin"
|
|
|
|
|
|
I usually go about this by getting a list of files from the folder.
string[] filesInDir = System.IO.Directory.GetFiles(pathToMyFiles, "*.jpeg");
just replace the "jpeg" filter with the different image extensions you want to gather. You could the loop through the string array
foreach(string file in filesInDir){Image img = Image.FromFile(file);}
Just because we can; does not mean we should.
|
|
|
|
|
Thanks for the input
Mike
|
|
|
|
|
I have a DataGridView on a Windows Form. Data, from a Collection object is being stored in a BindingSource. From the BindingSource it is than passed on to the DataGridView. On debugging, all three (the collection object, the BindingSource and the DataGridView) show that they have the values. But after running the application, the DataGridView doesn't display the values.
Kindly tell me a solution for this.
Thanks in advance
|
|
|
|
|
I've got a .NET application where I need to receive data over the serial port.
I'm trying to receive data over the serial port that's of variable length and does not have an end line character.
I'm raising the dataReceived event like so:
void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
string data = rfswitch.ReadExisting();
MessageBox.Show(data);
}
However the event is being called twice with part of the data string in the first call and the remaining part in the second call.
How do I hold the dataReceived event from firing until the whole message has been received?
Thanks!
|
|
|
|
|
Hi,
cmarcus1979 wrote: How do I hold the dataReceived event from firing until the whole message has been received?
AFAIK you can't in general. Serial data comes in over the cable at the rate of the sender.
It gets buffered a couple of times, it gets copied when specific characters are seen,
when a buffer fills, when a timer elapses, whatever; and it will fire your event once
or several times.
If your data exceeds one of the buffer sizes, it most probably will fire multiple times.
In special cases, you can get a single event. Here are some, they all require
cooperation by the other party:
- you implement a question-and-answer system, where the PC asks for data, the other
party sends data while signalling its transmission using one of the control lines
(keep forgetting which is which). Then you can use a PinChanged event instead of
the DataReceived event.
- you append a fixed character to every answer, one that does not appear in the data itself.
Now you can do ReadLine in a separate thread, and have that signal your own event.
- you allow for timing constraints, as in: each answer will take less than T milliseconds
and there will not be more than one conversation in each T milliseconds. Now you can
use DataReceived to start a timer, and the timer elapsing as an event that does the
ReadExisting. (remark: there is a minimum for T, say 33 msec for regular .NET timers;
see my timers article).
On top of all this, you should program defensively, which includes your code should
cope with transmission problems such as sudden disconnects, a lost message, and
a damaged message. This means whatever you implement, at a minimum you must have some
kind of supervisor that resets things when communication comes to a halt.
Hope this helps.
|
|
|
|
|
Hello Luc,
Excellent response. I've decided to use the timer and it seems to be working extremely well. Thanks for the help!
Best Regards,
-Chris
|
|
|
|
|
hi
how can i protect my programs that no one can install them
without my code number ?
i need this in c#
thanks
|
|
|
|
|
Have you tried the search box? Maybe Google?
only two letters away from being an asset
|
|
|
|
|
That is a tall order you are asking for in a programming forum.
"Real programmers just throw a bunch of 1s and 0s at the computer to see what sticks" - Pete O'Hanlon
|
|
|
|
|
no one can help me ?
i need direction... something....
|
|
|
|
|
Don't have a real specific answer for you. Techniques for creating serial numbers for your product is something many companies do not divulge how they do it.
"Real programmers just throw a bunch of 1s and 0s at the computer to see what sticks" - Pete O'Hanlon
|
|
|
|
|
Hi friends,
I have a two columns as unitprice and quantity in salesreport table. I am constructing new column by multplying this two column. I gave the name of sales for this new column. I want to ge average of sales column.
I tried below code but program says the column name of sales is invalid.
select unitprice,quantity,unitprice*quantitiy as sales from salesreport
where sales>avg(sales)
|
|
|
|
|
I think you have to change the structure of your query a bit in order to get the results you would like.
First off, Sales is a calculated column, so if you would like to filter by that value, you will have to filter using the calculation instead of the alias you give to that calculation.
Secondly, to get the average sales, you'll have to include a sub-query in your where clause that will calculate the average. This subquery will then be used to compare values against to determine if it meets the criteria in your where clause
Your query should look similar to:
<br />
select <br />
unitprice,<br />
quantity,<br />
unitprice * quantitiy as sales <br />
from<br />
salesreport<br />
where <br />
(unitprice * quantitiy) > (select avg(unitprice * quantitiy) from salesreport)<br />
|
|
|
|
|
Thanks so much for your quick and detailed response but i have another problem. First of all i wonder why we can't write avg(sales) instead of avg(unitprice * quantitiy).
I am working with nortwind sample.
I have the column sum("order details".unitprice*quantity*(1-discount)) as totalsales
(I don't write all all code, if it is not clear what I want , i can write all my code trying.)
as accumulated new column. I want to get average of this.and I used group by function also. I wrote avg(sum("order details".unitprice*quantity*(1-discount)) ) .Program says you can not sum in....)
|
|
|
|
|
I used below code series and I got "An aggregate may not appear in the WHERE clause unless it is in a subquery contained in a HAVING clause or a select list, and the column being aggregated is an outer reference."
error.
select employees.Firstname,employees.lastname,orders.OrderID,
sum("order details".unitprice*quantity*(1-discount)) as Sales from (Employees inner join orders on employees.employeeID=orders.employeeID) inner join "order details" on orders.orderID="order details".orderID
where sum("order details".unitprice*quantity*(1-discount))>(select avg(sum("order details".unitprice*quantity*(1-discount))) from "order details")
group by employees.lastname,orders.orderID,employees.firstname
|
|
|
|