Determine if file is being used by another process

EDN Admin

Well-known member
Joined
Aug 7, 2010
Messages
12,794
Location
In the Machine
Hello,
I would like to know what is the<b> best way</b> (less code, best performance and more safety) to check if a file is used by an other process.

Catching the IOException, declaring a API function or something else?

1)

<div style="overflow:auto;background-color:white;line-height:100% ! important;font-family:Courier New;font-size:11px <table style="border-width:0px;margin:2px 0px;width:99%;border-collapse:collapse;background-color:rgb(255, 255, 255)" cellpadding=0 cellspacing=0><col style="border-right:1px solid gray;font-family:Courier New;font-size:11px;background-color:rgb(238, 238, 238);padding-right:5px;padding-left:10px;width:5px;color:gray;text-align:right;vertical-align:top <col style="font-family:Courier New;font-size:11px;padding-left:10px;white-space:nowrap <tbody><tr><td><nobr>1</nobr></td><td><font style="font-size:11px  </font></td></tr><tr><td><nobr>2</nobr></td><td style="background-color:rgb(247, 247, 247) System.IO.FileStream stream = <font style="color:blue null</font><font style="font-size:11px ; </font></td></tr><tr><td><nobr>3</nobr></td><td><font style="color:blue try</font><font style="font-size:11px  </font></td></tr><tr><td><nobr>4</nobr></td><td style="background-color:rgb(247, 247, 247) { </td></tr><tr><td><nobr>5</nobr></td><td>    System.IO.FileStream stream = <font style="color:blue new</font><font style="font-size:11px  System.IO.FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read); </font></td></tr><tr><td><nobr>6</nobr></td><td style="background-color:rgb(247, 247, 247)     <font style="color:blue if</font><font style="font-size:11px  (</font><font style="color:blue null</font><font style="font-size:11px  != stream) </font></td></tr><tr><td><nobr>7</nobr></td><td>    { </td></tr><tr><td><nobr>8</nobr></td><td style="background-color:rgb(247, 247, 247)         <font style="color:blue byte</font><font style="font-size:11px [] bytes = </font><font style="color:blue new</font><font style="font-size:11px  </font><font style="color:blue byte</font><font style="font-size:11px [stream.Length]; </font></td></tr><tr><td><nobr>9</nobr></td><td>        <font style="color:blue int</font><font style="font-size:11px  bytesRead = stream.Read(bytes, 0, stream.Length); </font></td></tr><tr><td><nobr>10</nobr></td><td style="background-color:rgb(247, 247, 247)     } </td></tr><tr><td><nobr>11</nobr></td><td>} </td></tr><tr><td><nobr>12</nobr></td><td style="background-color:rgb(247, 247, 247) <font style="color:blue finally</font><font style="font-size:11px  </font></td></tr><tr><td><nobr>13</nobr></td><td>{ </td></tr><tr><td><nobr>14</nobr></td><td style="background-color:rgb(247, 247, 247)     <font style="color:blue if</font><font style="font-size:11px  (</font><font style="color:blue null</font><font style="font-size:11px  != stream) </font></td></tr><tr><td><nobr>15</nobr></td><td>    { </td></tr><tr><td><nobr>16</nobr></td><td style="background-color:rgb(247, 247, 247)         stream.Close(); </td></tr><tr><td><nobr>17</nobr></td><td>    } </td></tr><tr><td><nobr>18</nobr></td><td style="background-color:rgb(247, 247, 247) } </td></tr><tr><td><nobr>19</nobr></td><td> </td></tr></tbody></table>

2)
<div style="overflow:auto;background-color:white;line-height:100% ! important;font-family:Courier New;font-size:11px <table style="border-width:0px;margin:2px 0px;width:99%;border-collapse:collapse;background-color:rgb(255, 255, 255)" cellpadding=0 cellspacing=0><col style="border-right:1px solid gray;font-family:Courier New;font-size:11px;background-color:rgb(238, 238, 238);padding-right:5px;padding-left:10px;width:5px;color:gray;text-align:right;vertical-align:top <col style="font-family:Courier New;font-size:11px;padding-left:10px;white-space:nowrap <tbody><tr><td><nobr>1</nobr></td><td><font style="font-size:11px     </font><font style="color:green // Use interop to call the CreateFile function.</font><font style="font-size:11px  </font></td></tr><tr><td><nobr>2</nobr></td><td style="background-color:rgb(247, 247, 247)     <font style="color:green // For more information about CreateFile,</font><font style="font-size:11px  </font></td></tr><tr><td><nobr>3</nobr></td><td>    <font style="color:green // see the unmanaged MSDN reference library.</font><font style="font-size:11px  </font></td></tr><tr><td><nobr>4</nobr></td><td style="background-color:rgb(247, 247, 247)     [DllImport(<font style="color:blue "kernel32.dll"</font><font style="font-size:11px , SetLastError = </font><font style="color:blue true</font><font style="font-size:11px , CharSet=CharSet.Unicode)] </font></td></tr><tr><td><nobr>5</nobr></td><td>    <font style="color:blue static</font><font style="font-size:11px  </font><font style="color:blue extern</font><font style="font-size:11px  SafeFileHandle CreateFile(</font><font style="color:blue string</font><font style="font-size:11px  lpFileName, </font><font style="color:blue uint</font><font style="font-size:11px  dwDesiredAccess, </font></td></tr><tr><td><nobr>6</nobr></td><td style="background-color:rgb(247, 247, 247)       <font style="color:blue uint</font><font style="font-size:11px  dwShareMode, IntPtr lpSecurityAttributes, </font><font style="color:blue uint</font><font style="font-size:11px  dwCreationDisposition, </font></td></tr><tr><td><nobr>7</nobr></td><td>      <font style="color:blue uint</font><font style="font-size:11px  dwFlagsAndAttributes, IntPtr hTemplateFile); </font></td></tr><tr><td><nobr>8</nobr></td><td style="background-color:rgb(247, 247, 247)  </td></tr><tr><td><nobr>9</nobr></td><td>    <font style="color:blue public</font><font style="font-size:11px  </font><font style="color:blue void</font><font style="font-size:11px  Load(</font><font style="color:blue string</font><font style="font-size:11px  Path) </font></td></tr><tr><td><nobr>10</nobr></td><td style="background-color:rgb(247, 247, 247)     { </td></tr><tr><td><nobr>11</nobr></td><td>        <font style="color:blue if</font><font style="font-size:11px  (Path == </font><font style="color:blue null</font><font style="font-size:11px  && Path.Length == 0) </font></td></tr><tr><td><nobr>12</nobr></td><td style="background-color:rgb(247, 247, 247)         { </td></tr><tr><td><nobr>13</nobr></td><td>            <font style="color:blue throw</font><font style="font-size:11px  </font><font style="color:blue new</font><font style="font-size:11px  ArgumentNullException(</font><font style="color:blue "Path"</font><font style="font-size:11px ); </font></td></tr><tr><td><nobr>14</nobr></td><td style="background-color:rgb(247, 247, 247)         } </td></tr><tr><td><nobr>15</nobr></td><td> </td></tr><tr><td><nobr>16</nobr></td><td style="background-color:rgb(247, 247, 247)         <font style="color:green // Try to open the file.</font><font style="font-size:11px  </font></td></tr><tr><td><nobr>17</nobr></td><td>        handleValue = CreateFile(Path, GENERIC_WRITE, 0, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero); </td></tr><tr><td><nobr>18</nobr></td><td style="background-color:rgb(247, 247, 247)  </td></tr><tr><td><nobr>19</nobr></td><td>        <font style="color:green // If the handle is invalid,</font><font style="font-size:11px  </font></td></tr><tr><td><nobr>20</nobr></td><td style="background-color:rgb(247, 247, 247)         <font style="color:green // get the last Win32 error </font><font style="font-size:11px  </font></td></tr><tr><td><nobr>21</nobr></td><td>        <font style="color:green // and throw a Win32Exception.</font><font style="font-size:11px  </font></td></tr><tr><td><nobr>22</nobr></td><td style="background-color:rgb(247, 247, 247)         <font style="color:blue if</font><font style="font-size:11px  (handleValue.IsInvalid) </font></td></tr><tr><td><nobr>23</nobr></td><td>        { </td></tr><tr><td><nobr>24</nobr></td><td style="background-color:rgb(247, 247, 247)             Marshal.ThrowExceptionForHR(Marshal.GetHRForLastWin32Error()); </td></tr><tr><td><nobr>25</nobr></td><td>        } </td></tr><tr><td><nobr>26</nobr></td><td style="background-color:rgb(247, 247, 247)     } </td></tr><tr><td><nobr>27</nobr></td><td> </td></tr></tbody></table>



3)
<div style="overflow:auto;background-color:white;line-height:100% ! important;font-family:Courier New;font-size:11px <table style="border-width:0px;margin:2px 0px;width:99%;border-collapse:collapse;background-color:rgb(255, 255, 255)" cellpadding=0 cellspacing=0><col style="border-right:1px solid gray;font-family:Courier New;font-size:11px;background-color:rgb(238, 238, 238);padding-right:5px;padding-left:10px;width:5px;color:gray;text-align:right;vertical-align:top <col style="font-family:Courier New;font-size:11px;padding-left:10px;white-space:nowrap <tbody><tr><td><nobr>1</nobr></td><td><font style="font-size:11px             </font><font style="color:blue try</font><font style="font-size:11px  </font></td></tr><tr><td><nobr>2</nobr></td><td style="background-color:rgb(247, 247, 247)             { </td></tr><tr><td><nobr>3</nobr></td><td>                <font style="color:blue using</font><font style="font-size:11px  (FileStream fs = File.Open(GetLockFilename(), FileMode.Open, FileAccess.ReadWrite, FileShare.None)) </font></td></tr><tr><td><nobr>4</nobr></td><td style="background-color:rgb(247, 247, 247)                 { </td></tr><tr><td><nobr>5</nobr></td><td>                    fs.Close(); </td></tr><tr><td><nobr>6</nobr></td><td style="background-color:rgb(247, 247, 247)                 } </td></tr><tr><td><nobr>7</nobr></td><td>                <font style="color:green // The file is not locked</font><font style="font-size:11px  </font></td></tr><tr><td><nobr>8</nobr></td><td style="background-color:rgb(247, 247, 247)             } </td></tr><tr><td><nobr>9</nobr></td><td>            <font style="color:blue catch</font><font style="font-size:11px  (Exception) </font></td></tr><tr><td><nobr>10</nobr></td><td style="background-color:rgb(247, 247, 247)             { </td></tr><tr><td><nobr>11</nobr></td><td>                <font style="color:green // The file is locked</font><font style="font-size:11px  </font></td></tr><tr><td><nobr>12</nobr></td><td style="background-color:rgb(247, 247, 247)             } </td></tr><tr><td><nobr>13</nobr></td><td> </td></tr></tbody></table>

Thanks.
<hr class="sig Best regards,

Sergiu

View the full article
 
Back
Top