|
Wouldn't be so handy if you'd use it to clear a folder. If you recently fetched the folders' contents, chances are that the files still exist.
Bastard Programmer from Hell
|
|
|
|
|
Pete, this is good solid code (I'd expect no less from you), but in a way I can see this as a bit of a diversion from the original topic: error handling and Try/Catch.
In your code, yes, a Directory will be created, if none exists, but, what about the case it's an error ... for this particular application ... if the user is trying to save a file to a Directory that does not exist ?
And, what about the case where the Directory exists, but is read-only ?
Should code like this be "throwing" errors ? And what, if the code "throws," should be "catching them." And, as Abbott said to Costello: "Who's on first ?"
best, Bill
"... Sturgeon's revelation. It came to him that Science Fiction is indeed ninety-percent crud, but that also—Eureka!—ninety-percent of everything is crud. All things—cars, books, cheeses, hairstyles, people and pins are, to the expert and discerning eye, crud, except for the acceptable tithe which we each happen to like." early 1950's quote from Venture Sci-Fi Magazine on the origin of Sturgeon's Law, by author Theodore Sturgeon: source Oxford English Dictionary on-line "Word-of-the-Day."
|
|
|
|
|
Bill, sorry for the delay in replying. To answer your unspoken question, yes and no - the code was answering the premise that exception handling should not be relied upon when a simple check can solve the issue. So, what is the error we're coping with in this example? It's the fact that you can't write a file into a directory until that directory exists.
The other side here, is the fact as you've rightly pointed out, that this doesn't address all the cases that can be tested for. In my defence, I wrote this as a cut-down sample in the CP editor as an example only, but you are right, there are many other conditions that could be catered for. The point is really two-fold, if you create a utility API to handle the conditions that you can test for (rather than catch as an exception) then you have given yourself a real advantage when you come to write your production code. No, you won't get rid of exception handling altogether, but you won't be relying on it to cope with conditions that could easily have been tested for.
So, why do I advocate this? Well, exception handling is meant to indicate something that you couldn't reasonably predict and cope with. The mark of a good application is one that doesn't surprise users, so I'm either going to have to do lots of try/catch (and then cope with the failure before triggering the condition in the try/catch again), or I can put something in place to cope with the error before it occurs and make an intelligent decision about coping with the problem.
I hope this somewhat rambling post conveys some of what I was trying to get across.
|
|
|
|
|
mjackson11 wrote: Is there a better way to do this than having a block in each method?
Yup, you can hook an event that catches all unhandled exceptions[^]. There you can log it, without having the need for a try-catch everywhere.
Log everything you encounter, and handle those using try-catch blocks; some will be bugs, some will be exceptions that need a) user interaction (file in use, database dead), b) no user interaction. Handle what you can and log everything.
Bastard Programmer from Hell
|
|
|
|
|
That is a last best effort rather than being a general solution because the AppDomain will then exit (or application will exit at the top level.)
|
|
|
|
|
That's the idea with an unexpected exception; your application is in an unknown state, and hence, should terminate.
Bastard Programmer from Hell
|
|
|
|
|
I don't see anything in your original post that suggested it was only applicable for "...unexpected exception; your application is in an unknown state".
Most exceptions will not fall into that category. In general your suggestion is not applicable for exceptions. And nothing I see in the OPs posts suggests it is applicable to the OP.
|
|
|
|
|
My rule of thumb, I never catch an error I can't handle. And I never try something when there is an associated way to guarantee success. There are some people that clamor about correct code causing missed deadlines. Anecdotaly, successful programmers never complain about how much time it takes to write code correctly.
|
|
|
|
|
Hear hear!
"If you don't have time to do it right, when will you have time to do it over?"
|
|
|
|
|
It depends on the situation.
1. If it is an all-good-or-not situation, then it deserves a single overall try-catch.
2. If you want to extract as much as possible, then you need very granular error checking (if possible) or try-catching (if no error peeking is possible).
3. And if you can't handle the exception(s), then it falls back to either #1 or #2 anyway.
|
|
|
|
|
mjackson11 wrote: Is there a lot of overhead associated with these?
Not unless there are in fact a lot of exceptions.
mjackson11 wrote: Is there a better way to do this than having a block in each method?
That depends on what the application does and what you do in the block.
If you have a server that runs 24x7 and moves data from one remote source to another then sometimes there will be connection failures. In a case like that then the it must catch exceptions that originate from communication problems and continue.
If it is a console app that runs either pass/fail by a human and they are not supposed to run it unless everything is already working then catching an exception is optional. Maybe friendly but also an extreme case.
If the app needs to handle 3 sequential cases and all must pass then you must handle exceptions so that you can take some sort of action if step 3 fails after the first two succeeded.
When I write servers I catch almost everything so I can log it.
And so on...
|
|
|
|
|
Can you please post a piece of your code in a try catch block?
|
|
|
|
|
I have heard that you can use WMI to check the status of services running on another machine, and even to start/stop them.
Anyone have any experience with this? Exmaples would be great.
Thanks
Everything makes sense in someone's mind
|
|
|
|
|
Try here[^] and here[^].
I have personally been experimenting with WMI recently, myself. Here at work, we have a network set up. However, I cannot seem to get remote access via WMI. I get "Access denied" messages, though I think it is due to domain security policy issues which are out of my hands. I have not tried it at home yet.
djj55: Nice but may have a permission problem
Pete O'Hanlon: He has my permission to run it.
|
|
|
|
|
Do you have any code you can share?
Everything makes sense in someone's mind
|
|
|
|
|
Hey i have made to forms. form 1 is the rich text file editor and the other is the find and replace.
in form1 i got 1 richtextbox and in form 2 i got 2 normal text boxes. i have changed all the modifier to public.
here the code i am using.
this is opening form2
private void findText_Click(object sender, EventArgs e)
{
Form2 frm2;
frm2 = new Form2();
frm2.ShowDialog();
}
here the code i am trying to use to find but it is not working
<pre lang="c#">RichTextBox frm1TB = ((Form1)this.Owner).txtDisplay;
int foundAt = frm1TB.Text. IndexOf(button1.Text);
hope someone can put me on the right path
|
|
|
|
|
Setting everything to public is bad, Form1 ought to expose some public interface (in the non-technical meaning of that word) that Form2 can use to communicate with it (which should be public or internal), for example a Find(string) method. (Since this is intrinsically a UI level functionality I think it's okay to do it with forms and in the UI code.)
Your immediate problem, I think, is that Form2 has no owner. Try
frm2.ShowDialog(this);
|
|
|
|
|
To further what BobJanova said...
For something similar I wrote last week, my editor control has the methods:
public void NextMatch ( string Pattern )
public void Replace ( string Pattern , string Substitute )
public void ReplaceAll ( string Pattern , string Substitute )
public void ClearMatches ()
|
|
|
|
|
try: Application.Run(new Form2());
- Nevin Janzen (thundercloudstudios.weebly.com)
|
|
|
|
|
You've already gotten lots of good ideas from the previous answers re the issue of 'communication' between the two Forms.
But, I would like to point out the specific error in your code where in Form2 you attempt to use "this.Owner:" at that point, "this" will refer to Form2, but the 'Owner property will be 'null: unless you have set, somewhere in code we do not see here, the 'Owner property of Form2 to Form1.
I am curious, also, if presenting Form2 via 'ShowDialog, so it will retain focus until closed is an absolute requirement for you. If not, I would like to propose another strategy. An alternative strategy where the 'Owner' property can come in real-handy.
Aside: it always bothers me to use 'ShowDialog' because you can move the mouse to some other Form and click something, and that attempt to take Focus away from the ShowDialog'd whatever, makes it do this little "quiver." imho, use of ShowDialog should perform a 'mouse capture" until it's closed
best, Bill
"... Sturgeon's revelation. It came to him that Science Fiction is indeed ninety-percent crud, but that also—Eureka!—ninety-percent of everything is crud. All things—cars, books, cheeses, hairstyles, people and pins are, to the expert and discerning eye, crud, except for the acceptable tithe which we each happen to like." early 1950's quote from Venture Sci-Fi Magazine on the origin of Sturgeon's Law, by author Theodore Sturgeon: source Oxford English Dictionary on-line "Word-of-the-Day."
|
|
|
|
|
Hi
I want to check the value of DataGridView Cell , If the value of Cell Is empy or Null !
Here is My Code :
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
if (DataGridView1[i, j].Value == null || DataGridView1[i, j].Value.Equals(""))
{
MessageBox.Show("Some Cells in dataGridView Have not any Value");
return ;
}
else
{
tabControl1.TabPages.Add(TabPage2);
tabControl1.TabPages.Remove(TabPage1);
}
}
}
I want to stay(stop) in TabPage1 if Some Value of Cell is Empty(Nul)
But It does not Work Good !
Thanks !
|
|
|
|
|
Well, it should be: DataGridView1.Cells[i,j]
You missed the Cells part. Now as a side note rant, why do you use those kind of variable names?
DataGridiew1, TabControl1 ...
If it's just a test then OK else kind of bad.
All the best,
Dan
|
|
|
|
|
DataGridView1.Cells[i,j]
There is no Property "Cell" for DataGridView !
in any case , i want to say , how can we evaluate Cell Value , when It is Nul Or Empty ?
I want to stop in TabPage1 when Cell Value is Empty !
thanks!
|
|
|
|
|
True, my bad, confused with another grid like control.
dataGridView1.Rows[i].Cells[j] is the correct one. and your original one is ok too.
[edit]
On a closer look the logic is flawed as hell. I just took a quick glips at the code the first time.
Don't activate tabs inside the for loops.
Use a boolean, set it to true if something is empty, then ouside the loops do your thing
such as showing messageboxes, activating tabcontrols or what have you based on that boolean logic.
All the best,
Dan
|
|
|
|
|
Yes , Thanks , But How can we give an Error and Stop In TabPage1?
Regards!
|
|
|
|
|