|
Your code is reacting to the Created event immediately after the file is created, but probably before the file is closed by the process that created it, so yes, the file is being held open with DenyShareAll while it's being written by the other process. By the time you realize it and look at the file, it's done being written and has been closed.
That's one of the pitfalls of the FSW. Your code has to be written to retry file operations if your going to start modifying the file while it's still being written. If you can't open the file, you'll have to wait a second and retry the operation. Keep retying until you either reach some retry limit your've put in, or the file successfully opens.
|
|
|
|
|
So if I insert put a thread sleep entry before this line
Thread.Sleep(500);
using (StreamReader reader = new StreamReader(e.FullPath))
would that solve it?
|
|
|
|
|
Since you have no idea how long the other application will have the file open, maybe and maybe not. You will STILL have to repeatedly try to open the file until your either exhaust your retry count or it opens.
|
|
|
|
|
With a little experimentation I just kept bumping up the time until I no longer got that error.
Now I am getting {"Must declare the scalar variable \"@DateTime\"."}.
I am not as savvy with SQL Commands. I am missing something simple I feel.
|
|
|
|
|
That solution will only work so long as the other process cooperates and performs EXACTLY as expected. Once the system gets booged down or the other process changes, your solution breaks instantly. That's why I said you MUST write your code to retry opening the file, NOT wait a predetermined amount of time. Your code is not written defensively and is actually hoping the future NEVER changes. Good luck with that.
Your SQL statement is written incorrectly. It's much better practice to specify the column names in your table and then the parameter names assigned to them. If your SQL table changes, it won't immediately break your code. You also have incorrectly created the parmater objects. Change the SQL to: (I'm making assumptions about your column names and types!!)
INSERT INTO AlarmsList (DateTime, Address, Location, State, AlarmMessage)
VALUES (@DateTime,@Address,@Location,@State,@AlarmMessage)
The names with the @ in front of them are your parameter place holders. You have to create these exact parameters in your code and give them the appropriate values. BTW, why are you storing your DateTimes as a string in the database?? Bad practice!
command.Parameters.AddWithValue("@DateTime, tokens[0]);
command.Parameters.AddWithValue("@Address", tokens[1]);
command.Parameters.AddWithValue("@Address", tokens[2]);
command.Parameters.AddWithValue("@Address", tokens[3]);
// 4 and 5 get skipped because you're not using them, so why take up the bandwidth passing them?
command.Parameters.AddWithValue("@Address", tokens[6]);
Putting in that line with the ?: in it was useless. Go back to the tokenizing code and validate you can fill in all the fields back there.
|
|
|
|
|
The DateTime Column is an odd format from the log file.
I think I can figure it out from here. Thanks for you suggestions.
Brian
|
|
|
|
|
Hi, I am trying to write a console program that among other things will use the sqlplus utility to run PL/SQL script in a file.
To this end I have the following bit of code:
<pre>
static void execute(string command, string args, int timeout, string process_title)
{
System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(command, args);
psi.RedirectStandardOutput = true;
psi.UseShellExecute = false;
System.Diagnostics.Process ps;
try
{
ps = System.Diagnostics.Process.Start(psi);
if(!ps.WaitForExit(timeout))
{
try
{
ps.Kill();
}
catch(Exception e)
{
log("Error while trying to terminate process");
log("Error: "+e.Message);
}
throw new Exception(process_title+" operation has timed out.");
}
}
catch(Exception e)
{
log("Error Running "+process_title);
throw e;
}
}
</pre>
However when I run
execute("sqlplus", @"mylogin/mypassword@sid @filepath", 50000, "my process");
I get a timeout, even if the file only contains a simple and small select clause.
Any ideas?
I suspect this is not sqlplus related since running
execute("dir", @"C:\", 1000, "dir");
results in a "The system cannot find the file specified" error
|
|
|
|
|
Can you not use the oracle drivers in .NET and execute the script through the common runtime?
The reason you get the time out is because the application is likely waiting for input. I believe there is a WaitForInputIdle method which might suit you better.
Need a C# Consultant? I'm available.
Happiness in intelligent people is the rarest thing I know. -- Ernest Hemingway
|
|
|
|
|
"dir" cannot be executed because there is no "dir.exe", it is just a command supported by cmd.exe.
Can you try to disable RedirectStandardOutput? If you don't get a timeout then, your application is not handling the output fast enough. (the "sqlplus" process will pause when the output buffer is full)
|
|
|
|
|
Yes, disabling redirect standard output works fine.
Is there a way to deal with this short of editing the script file itself to turn spooling on?
I would like the equivalent of 'sqlplus user/pass@sid @scriptfilename > logfilename', but not surprisingly, appending '> logfilename' to the arguments string doesn't work.
|
|
|
|
|
Found the answer here:
http://weblogs.asp.net/israelio/archive/2004/08/31/223447.aspx how to pipe to a process
just launch cmd.exe and pass everything to it as a parameter.
Works great for me, anyone have any idea if this might be inferior for any reason? Why should I not just write a wrapper to launch all my prcoesses this way?
|
|
|
|
|
How do i set a menu button to change the webpage to another.
Not a ComboBox, just a regular Menu Button to change my web browsers page.
Also I've seen programs with a Check box button that if clicked the window will always be on top. What code would i need to put into that?
|
|
|
|
|
The answer to your second question:
Add a checkbox to your form, and set it's CheckStateChanged event handler.
Write the following code within the event handler:
if (checkBox1.Checked == true)
{
this.TopMost = true;
}
else
{
this.TopMost = false;
}
And that's it.
Virtual1ty
"Any fool can learn from his own mistakes, but a wise man learns from mistakes of others"
|
|
|
|
|
Thanks Virtual1ty
|
|
|
|
|
You're welcome
Virtual1ty
"Any fool can learn from his own mistakes, but a wise man learns from mistakes of others"
|
|
|
|
|
What about
this.TopMost = checkBox1.Checked
?
modified 12-Sep-18 21:01pm.
|
|
|
|
|
Oh yeah, I didn't think about that
Virtual1ty "Any fool can learn from his own mistakes, but a wise man learns from mistakes of others"
|
|
|
|
|
C# Beginner Nick wrote: to change my web browsers page.
Do you mean the browser that's installed on your pc, or is it a webbrowser component on your form?
Virtual1ty
"Any fool can learn from his own mistakes, but a wise man learns from mistakes of others"
|
|
|
|
|
Component on my Form,
And the buttons are in the Menu Strip.
|
|
|
|
|
Then you can use the WebBrowser component's Navigate() method in the button's event handler. For example:
WebBrowser1.Navigate("http://www.codeproject.com");
Virtual1ty
"Any fool can learn from his own mistakes, but a wise man learns from mistakes of others"
|
|
|
|
|
Ohh ok i understand. Thanks again Virtual1ty
|
|
|
|
|
Glad to help you
Virtual1ty "Any fool can learn from his own mistakes, but a wise man learns from mistakes of others"
|
|
|
|
|
Thanks again, even though I already thanked you twice.
Thought I'd say thanks again because I just now finished the program I was creating becuase of you're help
It allows me to view every episode of Yu Yu Hakusho
I made it for my sister becuase she loves the show and i wanted to try something new.
|
|
|
|
|
I am after writing a C# program which gives details of the NTFS file system. It also offers the chance to do basic undelete. However I have discovered that when you start a .NET 2 program a file with a long alphanumeric name is created and deleted in the system32/temp directory. Is it possible to prevent this as it poses a threat to successful undeleting.
Thanks in Advance
Liam
|
|
|
|
|
Don't parse the temp folders. Even in linux applications make heavy use of temp folders files.
Need a C# Consultant? I'm available.
Happiness in intelligent people is the rarest thing I know. -- Ernest Hemingway
|
|
|
|