Har följande problem.. Loopar den 4 gånger i while eller är det så att du typ inte satt nått NotifyFilter så att den går in i denna metod fyra gånger när en file släpps i en katalog? Om man kortar ner till: Ja den loopar 4 ggr när en filen skapas i katalogen. Jamen då är koden ovan rätt oväsentlig? Då är det ju hur du gjort din filewatcher som är av intresse? Nix.. Saxat från MSDN: Du kan ha en tråd som kollar med ett visst återkommande intervall och därimellan är sövd. Bytte till en timer och lite annan kodning så löste det sig.FilsystemWatcher
Koden nedan av någon anledning som jag tydligen inte fattat loopar igenom 4ggr?
Varför gör den det? Även om filen som läses innehåller bara 1 rad.
private void DoLabel(object sender, FileSystemEventArgs e)
{
string filename = "C:\\pickup1\\jojo.dat";
string line;
string[] myArr;
using (TextReader tx = new StreamReader(filename, System.Text.Encoding.Default, false))
{
while ((line = tx.ReadLine()) != null)
{
line = line.Replace('\"', ' ');
myArr = line.Split(new Char[] { ',' });
if (myArr[0].Trim() == "H")
{
headerText = myArr[2].ToString();
ordernrText = myArr[1].ToString();
HeaderLabel.OriginAtMargins = false;
HeaderLabel.PrinterSettings.Copies = 1;
MessageBox.Show(myArr[0].Trim().ToString(), "HEADER", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
//HeaderLabel.Print();
}
else
{
picturePath = "C:\\Pictures\\" + myArr[6].Replace(" ", "") + ".gif";
slrText = myArr[5].ToString();
benamning = myArr[3].TrimStart().ToString();
JokerEtikett.OriginAtMargins = false;
JokerEtikett.PrinterSettings.Copies = 1;
// JokerEtikett.Print();
MessageBox.Show(myArr[5].Trim().ToString(), "LABEL", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
}
tx.Close();
tx.Dispose();
}
toolStripStatusLabel1.Text = "Senaste körning: " + GetTime();
}
Sv: FilsystemWatcher
Sv:FilsystemWatcher
Om man kortar ned till kod till det som spelar roll:
private void DoLabel()
{
string filename = @"C:\temp\tet.dat";
string line;
string[] myArr;
using (TextReader tx = new StreamReader(filename, System.Text.Encoding.Default, false))
{
while ((line = tx.ReadLine()) != null)
{
line = line.Replace('\"', ' ');
}
tx.Close();
}
Den loopar en gång om filen har en rad. Således går ditt filewatcher event fler gånger eller så är det något strul med din inputfil.Sv:FilsystemWatcher
Notify filter är satt till LastWrite.Sv: FilsystemWatcher
Sv:FilsystemWatcher
this.JojoWatcher.EnableRaisingEvents = true;
this.JojoWatcher.Filter = "jojo.dat";
this.JojoWatcher.NotifyFilter = System.IO.NotifyFilters.LastWrite;
this.JojoWatcher.Path = "C:\\JokerEtikett\\Pickup";
this.JojoWatcher.SynchronizingObject = this;
this.JojoWatcher.Changed += new System.IO.FileSystemEventHandler(this.DoLabel);
Ändrade koden ovan
Felet kvarstår dock..
Känns som om det är här det felar..
Sv:FilsystemWatcher
Men jag provade att göra så här:
Skapade en knapp som startar inläsningen av filen. Då går den bara en gång.
Men om jag låter "watchern" starta den så startas den 4 ggr.
Skumt..Sv: FilsystemWatcher
Common file system operations might raise more than one event. For example, when a file is moved from one directory to another, several OnChanged and some OnCreated and OnDeleted events might be raised. Moving a file is a complex operation that consists of multiple simple operations, therefore raising multiple events. Likewise, some applications (for example, antivirus software) might cause additional file system events that are detected by FileSystemWatcher.
Får kanske komma upp med någon annan lösning... Om inte någon annan har nån bra idé?Sv:FilsystemWatcher
En annan alternativ lösning kan vara att ha koll på filen som skapas i katalogen och om du redan fixat med denna fil så hoppa över all action och låt enbart eventet gå.Sv: FilsystemWatcher
Tack för input iaf.