|
|||||||
|
|
|
![]() |
|
|
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 14: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: 08:04.





















