EDN Admin
Well-known member
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
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