Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Closing Open Files using C#

Tags:

c#

wmi

I have a situation where people are connected to files on a share and it's blocking me from overwriting the file. I'm trying to write a method that will look to see if a filePath that I provide is currently locked in this way and close the network session of this resource.

I looked at the ADSI Winnt provider but the Resources.Remove member isn't implemented. Then I looked at Win32_ServerSession and while I am able to use Delete member, it kills all of the resources for a given user. I need to figure out how to be more specific.

I've been walking GetRelationsShips and Properties but I'm just stumped at the moment.

like image 235
Christopher Painter Avatar asked Nov 19 '09 02:11

Christopher Painter


2 Answers

It would be difficult to consider all the ramifications of doing this because you can't necessarily predict the resulting behavior of the application that currently has the file locked.

Is there some other way to do this? For example do you have to overwrite the file right away, or can you have some external process that continually tries to overwrite the file every few minutes until it succeeds?

like image 57
Jeremy Avatar answered Sep 30 '22 13:09

Jeremy


I faced the same problem. So far I know, the only way to do that, is using the Win32API:

[DllImport("Netapi32.dll", SetLastError=true, CharSet = CharSet.Unicode)]
public static extern int NetFileClose(string servername, int id);

I made a short attempt to realize this and I can just enum the files right, but in my code - I had just a look into it - the code to close a file is set to be a comment. If you would give this a try, I can you sent a library [wrapper around NetFileXXX] and a short demo, but, as I said: I never closed a file. But this is possibly a short way to that.

I do not know, how to interchange file on stackoverflow now :-( ?!?

br--mabra

like image 23
mabra Avatar answered Sep 30 '22 12:09

mabra