Exemplo n.º 1
0
        public void QuickIOFileMetadataInstance()
        {
            Win32FindDataTestValue data = new Win32FindDataTestValue();

            QuickIOFileMetadata instance = new QuickIOFileMetadata(@"C:\test.txt", data);

            instance.FullName.Should().Be(@"C:\test.txt");
            instance.FullNameUnc.Should().Be(@"\\?\C:\test.txt");
            instance.Name.Should().Be(@"test.txt");
        }
Exemplo n.º 2
0
        /// <summary>
        /// Determined metadata of directory
        /// </summary>
        /// <param name="uncDirectoryPath">Path of the directory</param>
        /// <param name="findData"><see cref="Win32FindData"/></param>
        /// <param name="enumerateOptions">The enumeration options for exception handling</param>
        /// <returns><see cref="QuickIODirectoryMetadata"/> started with the given directory</returns>
        /// <exception cref="PathNotFoundException">This error is fired if the specified path or a part of them does not exist.</exception>
        internal static QuickIODirectoryMetadata EnumerateDirectoryMetadata( String uncDirectoryPath, Win32FindData findData, QuickIOEnumerateOptions enumerateOptions )
        {
            // Results
            var subFiles = new List<QuickIOFileMetadata>( );
            var subDirs = new List<QuickIODirectoryMetadata>( );

            // Match for start of search
            var currentPath = QuickIOPath.Combine( uncDirectoryPath, QuickIOPatternConstants.All );

            // Find First file
            var win32FindData = new Win32FindData( );
            int win32Error;
            using ( var fileHandle = FindFirstSafeFileHandle( currentPath, win32FindData, out win32Error ) )
            {
                // Take care of invalid handles
                if ( fileHandle.IsInvalid )
                {
                    if ( win32Error != Win32ErrorCodes.ERROR_NO_MORE_FILES )
                    {
                        InternalQuickIOCommon.NativeExceptionMapping( uncDirectoryPath, win32Error );
                    }

                    if ( EnumerationHandleInvalidFileHandle( uncDirectoryPath, enumerateOptions, win32Error ) )
                    {
                        return null;
                    }
                }

                // Treffer auswerten
                do
                {
                    // Ignore . and .. directories
                    if ( InternalRawDataHelpers.IsSystemDirectoryEntry( win32FindData ) )
                    {
                        continue;
                    }

                    // Create hit for current search result
                    var uncResultPath = QuickIOPath.Combine( uncDirectoryPath, win32FindData.cFileName );

                    #region File
                    // if it's a file, add to the collection
                    if ( !InternalHelpers.ContainsFileAttribute( win32FindData.dwFileAttributes, FileAttributes.Directory ) )
                    {
                        var fileMetaData = new QuickIOFileMetadata( uncResultPath, win32FindData );
                        subFiles.Add( fileMetaData );
                    }
                    #endregion
                    #region Directory
                    else
                    {
                        var dir = EnumerateDirectoryMetadata( uncResultPath, win32FindData, enumerateOptions );
                        subDirs.Add( dir );
                    }
                    #endregion
                    // Create new FindData object for next result

                    win32FindData = new Win32FindData( );
                } // Search for next entry
                while ( Win32SafeNativeMethods.FindNextFile( fileHandle, win32FindData ) );
            }

            return new QuickIODirectoryMetadata( uncDirectoryPath, findData, subDirs, subFiles );
        }