|
|
|
![]() |
|
Strumenti |
![]() |
#101 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Ruby
![]() Codice:
$numHidden = 0 $numOther = 0 def procdir(dirname) begin Dir.foreach(dirname) do |dir| dirpath = dirname + '/' + dir if File.directory?(dirpath) then if dir != '.' && dir != '..' then procdir(dirpath) end else if File.basename(dirpath)[0] == '.' then $numHidden += 1 else $numOther += 1 end end end rescue => e puts e end end procdir(ARGV[0]) puts "Hidden : #{$numHidden}" puts "Hidden : #{$numOther}" puts "Hidden : #{$numHidden + $numOther}" ![]() |
![]() |
![]() |
![]() |
#102 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
![]() ![]() |
![]() |
![]() |
![]() |
#103 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Nientedimeno C# con pinvoke è più veloce della mia dll.
![]() ![]() DirWalkCApi.cs: Codice:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Runtime.InteropServices; namespace DirWalkCApi { class Program { private static int numHidden = 0; private static int numOther = 0; public const int MAX_PATH = 260; public const int MAX_ALTERNATE = 14; [StructLayout(LayoutKind.Sequential)] public struct FILETIME { public uint dwLowDateTime; public uint dwHighDateTime; } [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] public struct WIN32_FIND_DATA { public FileAttributes dwFileAttributes; public FILETIME ftCreationTime; public FILETIME ftLastAccessTime; public FILETIME ftLastWriteTime; public uint nFileSizeHigh; public uint nFileSizeLow; public uint dwReserved0; public uint dwReserved1; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_PATH)] public string cFileName; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_ALTERNATE)] public string cAlternate; } [DllImport("kernel32", CharSet = CharSet.Auto)] public static extern IntPtr FindFirstFile(string lpFileName, out WIN32_FIND_DATA lpFindFileData); [DllImport("kernel32", CharSet = CharSet.Auto)] public static extern bool FindNextFile(IntPtr hFindFile, out WIN32_FIND_DATA lpFindFileData); [DllImport("kernel32.dll")] public static extern bool FindClose(IntPtr hFindFile); public static void TraverseDirectory(string directoryPath) { IntPtr INVALID_HANDLE_VALUE = new IntPtr(-1); WIN32_FIND_DATA findData; char[] backslash = new char[] { '\\' }; IntPtr findHandle; string path = string.Empty; try { findHandle = FindFirstFile(directoryPath.TrimEnd(backslash) + @"\*", out findData); if (findHandle != INVALID_HANDLE_VALUE) { do { path = string.Format("{0}\\{1}", directoryPath.TrimEnd(backslash), findData.cFileName); if ((findData.dwFileAttributes & FileAttributes.Directory) != 0) { if (findData.cFileName != "." && findData.cFileName != "..") { TraverseDirectory(path); } } else { if ((findData.dwFileAttributes & FileAttributes.Hidden) != 0) numHidden++; else numOther++; } } while (FindNextFile(findHandle, out findData)); FindClose(findHandle); } } catch (System.ComponentModel.Win32Exception exc) // as suggested by John Saunders { int lastError = System.Runtime.InteropServices.Marshal.GetLastWin32Error(); Console.WriteLine("error:" + lastError.ToString()); //Console.WriteLine(exc.NativeErrorCode.ToString()); } } static void Main(string[] args) { TraverseDirectory(args[0].ToString()); Console.WriteLine("Hidden: {0}", numHidden); Console.WriteLine("Other : {0}", numOther); Console.WriteLine("Total : {0}", numHidden + numOther); } } } ![]() Ultima modifica di Vincenzo1968 : 20-03-2013 alle 13:56. |
![]() |
![]() |
![]() |
#104 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Questi invece i tempi della mia versione iterativa:
![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:04.