.NET Forum / .NET Framework / New Users / March 2006
FileSystemWatcher onCreated tell where it was created from?
|
|
Thread rating:  |
Brandon - 08 Mar 2006 20:55 GMT I'm trying to get a piece of software that will monitor a location on a drive, and if something appears on the location, report what was created and, if applicable where it was copied from. For instance, monitor my D:\ I copy a file from C:\ to D:\ I get "<filename> created on D:\ from C:\<filename>"
While I realize this may not be directly possible w/ .NET, if it's not, does somebody know where I could look in the WinAPI to find this out?
Thanks
 Signature He who dies with the most toys wins.
Michael Nemtsev - 08 Mar 2006 21:23 GMT Hello Brandon,
The FileSystemWatcherClass is responsible for this
see sample below (MSDN). The component is set to watch for changes in LastWrite and LastAccess time, the creation, deletion, or renaming of text files in the directory. If a file is changed, created, or deleted, the path to the file prints to the console. When a file is renamed, the old and new paths print to the console.
public class Watcher {
public static void Main() { Run();
}
[PermissionSet(SecurityAction.Demand, Name="FullTrust")] public static void Run() { string[] args = System.Environment.GetCommandLineArgs(); // If a directory is not specified, exit program. if(args.Length != 2) { // Display the proper way to call the program. Console.WriteLine("Usage: Watcher.exe (directory)"); return; }
// Create a new FileSystemWatcher and set its properties. FileSystemWatcher watcher = new FileSystemWatcher(); watcher.Path = args[1]; /* Watch for changes in LastAccess and LastWrite times, and the renaming of files or directories. */ watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
| NotifyFilters.FileName | NotifyFilters.DirectoryName; // Only watch text files. watcher.Filter = "*.txt";
// Add event handlers. watcher.Changed += new FileSystemEventHandler(OnChanged); watcher.Created += new FileSystemEventHandler(OnChanged); watcher.Deleted += new FileSystemEventHandler(OnChanged); watcher.Renamed += new RenamedEventHandler(OnRenamed);
// Begin watching. watcher.EnableRaisingEvents = true;
// Wait for the user to quit the program. Console.WriteLine("Press \'q\' to quit the sample."); while(Console.Read()!='q'); }
// Define the event handlers. private static void OnChanged(object source, FileSystemEventArgs e) { // Specify what is done when a file is changed, created, or deleted. Console.WriteLine("File: " + e.FullPath + " " + e.ChangeType); }
private static void OnRenamed(object source, RenamedEventArgs e) { // Specify what is done when a file is renamed. Console.WriteLine("File: {0} renamed to {1}", e.OldFullPath, e.FullPath); } }
B> I'm trying to get a piece of software that will monitor a location on B> a B> drive, and if something appears on the location, report what was B> created and, B> if applicable where it was copied from. B> For instance, monitor my D:\ B> I copy a file from C:\ to D:\ B> I get "<filename> created on D:\ from C:\<filename>" B> While I realize this may not be directly possible w/ .NET, if it's B> not, does somebody know where I could look in the WinAPI to find this B> out? B> B> Thanks B> --- WBR, Michael Nemtsev :: blog: http://spaces.msn.com/laflour
"At times one remains faithful to a cause only because its opponents do not cease to be insipid." (c) Friedrich Nietzsche
Brandon - 08 Mar 2006 21:32 GMT Your example does not cover the scenario I outlined.
 Signature He who dies with the most toys wins.
> Hello Brandon, > [quoted text clipped - 87 lines] > "At times one remains faithful to a cause only because its opponents do not > cease to be insipid." (c) Friedrich Nietzsche Michael Nemtsev - 08 Mar 2006 21:42 GMT Hello Brandon,
sure, it's just a sample. Change in to meet your needs
B> Your example does not cover the scenario I outlined. B> B> "Michael Nemtsev" wrote: B>
>> Hello Brandon, >> [quoted text clipped - 82 lines] >> "At times one remains faithful to a cause only because its opponents >> do not cease to be insipid." (c) Friedrich Nietzsche --- WBR, Michael Nemtsev :: blog: http://spaces.msn.com/laflour
"At times one remains faithful to a cause only because its opponents do not cease to be insipid." (c) Friedrich Nietzsche
Brandon - 08 Mar 2006 21:55 GMT No.
What yours does is tells me when a file was created, changed, deleted, or renamed - which is simple and something I've already done.
What I want is for when a file is CREATED, to be able to know where it was created FROM (ie: if a file is copied, what was the source directory, if it was saved from an application, a 'null' value is acceptable) this the FileSystemWatcher does not do (straightforwardly anyway).
 Signature He who dies with the most toys wins.
> Hello Brandon, > [quoted text clipped - 97 lines] > "At times one remains faithful to a cause only because its opponents do not > cease to be insipid." (c) Friedrich Nietzsche Michael Nemtsev - 09 Mar 2006 05:45 GMT Hello Brandon,
There are no functions to do that. What do u need is to monitor harddrivers for changes, and for each change, for example if file was created, u need to look at log of changes of others drivers to determine where file was to understand either it was newly created or copied.
B> What yours does is tells me when a file was created, changed, B> deleted, or renamed - which is simple and something I've already B> done. B> B> What I want is for when a file is CREATED, to be able to know where B> it was created FROM (ie: if a file is copied, what was the source B> directory, if it was saved from an application, a 'null' value is B> acceptable) this the FileSystemWatcher does not do (straightforwardly B> anyway). B> B> "Michael Nemtsev" wrote: B>
>> Hello Brandon, >> [quoted text clipped - 100 lines] >> "At times one remains faithful to a cause only because its opponents >> do not cease to be insipid." (c) Friedrich Nietzsche --- WBR, Michael Nemtsev :: blog: http://spaces.msn.com/laflour
"At times one remains faithful to a cause only because its opponents do not cease to be insipid." (c) Friedrich Nietzsche
Brandon - 09 Mar 2006 15:13 GMT Creating an FSW on all the drives will also not help me - when a file is copied FROM a drive, nothing about the file changes, therefore an FSW on the drive will catch nothing. While LastAccess filter seems to grab the data occasionally, it's not reliable in the least.
I was expecting a solution involving something with the WinAPI - can anybody else offer some insight. I could have guaranteed that .NET wouldn't offer this level of functionality.
 Signature He who dies with the most toys wins.
> Hello Brandon, > [quoted text clipped - 127 lines] > "At times one remains faithful to a cause only because its opponents do not > cease to be insipid." (c) Friedrich Nietzsche Goran Sliskovic - 09 Mar 2006 20:15 GMT > I'm trying to get a piece of software that will monitor a location on a > drive, and if something appears on the location, report what was created [quoted text clipped - 7 lines] > does > somebody know where I could look in the WinAPI to find this out? ...
I don't believe you will find something like that. Generally, there is no way to get that info (even kernel usually does not know).
Goran
Free MagazinesGet these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...
|
|
|