| File: Microsoft\VisualBasic\CompilerServices\IOUtils.vb | Web Access |
| Project: src\runtime\src\libraries\Microsoft.VisualBasic.Core\src\Microsoft.VisualBasic.Core.vbproj (Microsoft.VisualBasic.Core) |
' Licensed to the .NET Foundation under one or more agreements. ' The .NET Foundation licenses this file to you under the MIT license. Imports System Imports System.Security Imports System.IO Imports Microsoft.VisualBasic.CompilerServices.ExceptionUtils Namespace Microsoft.VisualBasic.CompilerServices <System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)> NotInheritable Class IOUtils ' Prevent creation. Private Sub New() End Sub Friend Shared Function FindFirstFile(ByVal assem As System.Reflection.Assembly, ByVal PathName As String, ByVal Attributes As IO.FileAttributes) As String Dim Dir As DirectoryInfo Dim DirName As String = Nothing Dim FileName As String Dim files() As FileSystemInfo Dim oAssemblyData As AssemblyData Const DiskNotReadyError As Integer = &H80070015 If PathName.Length > 0 AndAlso PathName.Chars(PathName.Length - 1) = Path.DirectorySeparatorChar Then DirName = Path.GetFullPath(PathName) FileName = "*.*" Else If PathName.Length = 0 Then FileName = "*.*" Else FileName = Path.GetFileName(PathName) DirName = Path.GetDirectoryName(PathName) If (FileName Is Nothing) OrElse (FileName.Length = 0) OrElse (FileName = ".") Then FileName = "*.*" End If End If If (DirName Is Nothing) OrElse (DirName.Length = 0) Then If Path.IsPathRooted(PathName) Then DirName = Path.GetPathRoot(PathName) Else DirName = Environment.CurrentDirectory If DirName.Chars(DirName.Length - 1) <> Path.DirectorySeparatorChar Then DirName = DirName & Path.DirectorySeparatorChar End If End If Else If DirName.Chars(DirName.Length - 1) <> Path.DirectorySeparatorChar Then DirName = DirName & Path.DirectorySeparatorChar End If End If If FileName = ".." Then DirName = DirName & "..\" FileName = "*.*" End If End If Try Dir = Directory.GetParent(DirName & FileName) files = Dir.GetFileSystemInfos(FileName) Catch ex As SecurityException Throw ex Catch IOex As IOException When _ (System.Runtime.InteropServices.Marshal.GetHRForException(IOex) = DiskNotReadyError) Throw VbMakeException(vbErrors.BadFileNameOrNumber) Catch ex As StackOverflowException Throw ex Catch ex As OutOfMemoryException Throw ex Catch Return "" End Try oAssemblyData = ProjectData.GetProjectData().GetAssemblyData(assem) oAssemblyData.m_DirFiles = files oAssemblyData.m_DirNextFileIndex = 0 oAssemblyData.m_DirAttributes = Attributes If (files Is Nothing) OrElse (files.Length = 0) Then Return "" End If Return FindFileFilter(oAssemblyData) End Function Friend Shared Function FindNextFile(ByVal assem As System.Reflection.Assembly) As String Dim oAssemblyData As AssemblyData oAssemblyData = ProjectData.GetProjectData().GetAssemblyData(assem) If oAssemblyData.m_DirFiles Is Nothing Then Throw New ArgumentException(SR.DIR_IllegalCall) End If If oAssemblyData.m_DirNextFileIndex > oAssemblyData.m_DirFiles.GetUpperBound(0) Then 'Prevent hitting the security check in this scenario oAssemblyData.m_DirFiles = Nothing oAssemblyData.m_DirNextFileIndex = 0 Return Nothing End If Return FindFileFilter(oAssemblyData) End Function Private Shared Function FindFileFilter(ByVal oAssemblyData As AssemblyData) As String Dim Index As Integer Dim files() As FileSystemInfo Dim file As FileSystemInfo files = oAssemblyData.m_DirFiles Index = oAssemblyData.m_DirNextFileIndex Do While True If Index > files.GetUpperBound(0) Then oAssemblyData.m_DirFiles = Nothing oAssemblyData.m_DirNextFileIndex = 0 Return Nothing End If file = files(Index) If ((file.Attributes And (FileAttributes.Directory Or FileAttributes.System Or FileAttributes.Hidden)) = 0) OrElse ((file.Attributes And oAssemblyData.m_DirAttributes) <> 0) Then oAssemblyData.m_DirNextFileIndex = Index + 1 Return files(Index).Name End If Index += 1 Loop Return Nothing End Function End Class End Namespace