PDA

View Full Version : girare programma quando un file viene modificato


sowdust
03-08-2011, 11:39
Buongiorno a tutti,

ho un server windows nel quale alcuni file di dati in una cartella vengono periodicamente modificati. La mia domanda è: come fare in modo che ogni volta che un file in quella cartella viene modificato, un altro programma parta in automatico e, possibilmente, utilizzi il nome del file modificato?

Ringrazio anticipatamente per ogni suggerimento!

mattia

gugoXX
03-08-2011, 11:47
C#, FileSystemWatcher.

http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx

sowdust
03-08-2011, 12:24
grazie mille per la risposta velocissima!
quindi da quanto ho capito mi basterebbe creare un programma in C# che venga eseguito all'avvio, e che avvii matlab passandogli come argomento il nome dell'ultimo file modificato. Dimentico qualcosa? Scusate ma non ho nessuna esperienza con .NET e quindi sono un po' spaesato

gugoXX
03-08-2011, 14:22
Si', esatto. Funzionale.

Avresti un processo sempre attivo, ovvero una brutta finestra DosBox nera, oppure una finestra semivuota.

Ulteriori successive migliorie potrebbero essere:
1. Creare un servizio
2. Creare un servizio che legge la configurazione da un file
ovvero la directory da monitorare, eventuali filtri sui file (ES: *.m)
3. Creare un servizio e anche un'applicazione che posssa cambiare i parametri del servizio al volo
4. Creare un servizio e anche un'applicazione che posssa cambiare i parametri del servizio al volo, e l'applicazione presente sulla statusbar nelle iconcine in basso a destra, apribile con menu contestuale, etc.

Ma non conoscendo nulla di .NET, e magari poco di programmazione, non ti aspettare che il tutto sia semplice.
Una volta scritto risulta essere solo un centinaio di linee di codice, ma per arrivarci al strada potrebbe essere in salita.

Inizia con la versione grezza ma funzionale, e poi ci si pensa. (Agile)

sowdust
04-08-2011, 13:29
grazie ancora per i suggerimenti molto utili. comincerò con la mia versione ed eventualmente aggiungerò il resto delle migliorie!

sowdust
06-08-2011, 14:37
ho quasi completato la versione "grezza", ma anche qui ho due problemi:


private static void OnChanged(object source, FileSystemEventArgs e)
{
Console.WriteLine("File: " + e.FullPath + " " + e.ChangeType);
var process = new Process {
StartInfo = new ProcessStartInfo {
FileName = "C:\\Program Files\\MATLAB\\R2011a\\bin\\matlab.exe"
}
};

process.Start();
process.WaitForExit();
}

ogni volta che un file viene modificato, non so perché ma viene scritto sulla console due volte (così come matlab viene avviato due volte).

Inoltre, vorrei che il filewatcher si "fermasse" mentre matlab esegue la sua computazione, e ripartisse (possibilmente gestendo gli eventuali eventi accaduti nel tempo in cui era in pausa) una volta terminata la computazione di matlab.
Solo che process.WaitForExit() non funziona perché credo che attenda solo l'avvio di matlab. Qualche soluzione più efficiente e meno macchinosa di creare un file watcher che monitori il file aperto da matlab?

grazie