Listar archivos de disco duro 1024GB

15/07/2009 - 15:17 por Jose Luis Cocha | Informe spam
Hice un programa con las funciones de directorio, pero solo me funciona
correctamente en discos duros de 300 GB, cuando ejecuto el mismo programa en
un disco de arreglos que conforman 1024 GB a mas el programa no funciona.
Se podría tener acceso directamente a la tabla de direcciones de archivos
como lo era la FAT32 en su momento para poder obtener el total de los
nombres de archivos en forma rápida y sin impactar en la performance del
servidor.

Saludos y Gracias

José Luis Cocha
Especialista TI
Lima Perú

Preguntas similare

Leer las respuestas

#6 Jose Luis Cocha
18/07/2009 - 20:29 | Informe spam
Aquí te paso el virus jajajaja

Estimado tengo que barrer un servidor de grabador de Voz Gringo que tiene
muchos problemas, por ello necesito obtener la totalidad de los archivos WAV
generados.
El programa ejecutado corre sin problemas en servidores de 300 GB pero
cuando intento ejecutar en un servidor de 1500 GB no hace nada. No se que
pueda estar pasando.

Saludos

José Luis
Lima Perú


"RFOG" escribió en el mensaje de
noticias:
El enlace que falta sobre abrir un disco en modo raw:


using System;
using System.Net;
using System.IO;
using System.Collections.Generic;
using System.Text;


namespace QfinitiListWav
{
public class RecursiveFileSearch
{
static System.Collections.Specialized.StringCollection log = new
System.Collections.Specialized.StringCollection();

static void Main(string[] args)
{
if (args.Length.Equals(0))
{
Console.WriteLine("Necesita Registrar Parametros para su
ejecucion Ejemplo: QfinitiListWav D:\\ E:\\Temporal\\Archivos.txt ");
return;
}

DateTime dt_inicio= DateTime.Now;
DateTime dt_fin;

StreamWriter sw = new StreamWriter(args[1]);

// Obtiene las unidades del sistema a ser leidas.

string[] drives = { args[0] }; // Cambiar por servidores y
carpetas

foreach (string dr in drives)
{
System.IO.DriveInfo di = new System.IO.DriveInfo(dr);

// Si la unidad no esta lista Salta a la Siguiente.
if (!di.IsReady)
{
Console.WriteLine("Unidad {0} No Puede ser Leida",
di.Name);
continue;
}
System.IO.DirectoryInfo rootDir = di.RootDirectory;
WalkDirectoryTree(rootDir,sw);
}



// Inidica a los archivos que se encontraron con restricciones.
Console.WriteLine("Archivos con restricciones de acceso");
foreach (string s in log)
{
Console.WriteLine(s);
}
// Espera la pulsacion de una tecla para continuar
dt_fin = DateTime.Now;
Console.WriteLine("Hora de Inicio " +
dt_inicio.ToLongTimeString() + " Hora Final " + dt_fin.ToLongTimeString());
Console.WriteLine("Presiona una Tecla para continuar");
Console.ReadKey();
sw.Close();
}

static void WalkDirectoryTree(System.IO.DirectoryInfo root,
StreamWriter sw)
{
string strFile = null;
string strFileName = null;
string strExt = null;
string strPath = null;
string strCanal = null;
string strObserv = null;
long size = 0;

System.IO.FileInfo[] files = null;
System.IO.DirectoryInfo[] subDirs = null;

// Inicializa el proceso para todos los tipos de archivos
try
{
files = root.GetFiles("ext*.*");
}
// Si algun archivo tiene alguna restriccion de acceso
adicional.
catch (UnauthorizedAccessException e)
{
// Continua la escritura del LOG para eventos que producen
error
log.Add(e.Message);
}

catch (System.IO.DirectoryNotFoundException e)
{
Console.WriteLine(e.Message);
}

if (files != null)
{
foreach (System.IO.FileInfo fi in files)
{
size = fi.Length;
strFileName = fi.FullName;
strFileName = strFileName.ToUpper();
if (strFileName.IndexOf("RECORDING") > 0 )
{
strPath = strFileName.Substring(0,
strFileName.LastIndexOf("\\")).ToUpper();
strFile =
strFileName.Substring(strFileName.LastIndexOf("\\") + 1).ToUpper();
strExt =
strFileName.Substring(strFileName.LastIndexOf(".") + 1).ToUpper();

if ((strExt.Equals("WAV") || strExt.Equals("ENC") ||
strExt.Equals("QPK")) && (strFile.Substring(0, 3).Equals("EXT")))
{
strCanal =
strPath.Substring(strPath.LastIndexOf("\\") + 1).ToUpper();
strPath = strPath.Substring(0,
strPath.LastIndexOf("\\")).ToUpper();
strObserv =
strPath.Substring(strPath.LastIndexOf("\\") + 1).ToUpper();
sw.WriteLine(strFile + "\t" + strCanal + "\t" +
strObserv + "\t" + fi.FullName + "\t" + size.ToString());
Console.WriteLine(fi.FullName);
}
}

}

// Ahora, encontrar todos los subdirectorios dentro de este
directorio. (Aqui la recursividad)
subDirs = root.GetDirectories();

foreach (System.IO.DirectoryInfo dirInfo in subDirs)
{
// Invocacion Recursiva
WalkDirectoryTree(dirInfo,sw);
}
}
}
}
}





http://msdn.microsoft.com/es-es/mag...63415.aspx

On Wed, 15 Jul 2009 15:39:20 +0200, RFOG wrote:

No sé qué quieres hacer, pero suena raro.

Si quieres recorrer recursivamente todos los ficheros de un disco duro
e irlos añadiendo a una lista, la mejor forma es que uses un TDA
genérico:

http://msdn.microsoft.com/es-es/lib...aeb7t.aspx
http://msdn.microsoft.com/es-es/lib...neric.aspx

Dependiendo de cómo o qué quieras hacer luego con eso, te convendrá
más uno u otro.

Olvídate de acceder a bajo nivel, y menos aun desde .NET. Aunque tiene
que ver poco con lo que quieres, en el enlace de abajo viene explicado
cómo abrir un disco en modo RAW, pero de poco te va a servir si tiene
formato NTFS, y menos aún dentro de un server, que dudo que te deje
abrir el disco de esa forma.

Si no quieres afectar al rendimiento general, puedes bajarte la
prioridad de tu proceso.

PS: ¿Por qué será que cuando alguien hace preguntas de este tipo lo
primero que me viene a la cabeza es: virus?


On Wed, 15 Jul 2009 08:17:39 -0500, "Jose Luis Cocha"
wrote:

Hice un programa con las funciones de directorio, pero solo me funciona
correctamente en discos duros de 300 GB, cuando ejecuto el mismo programa
en
un disco de arreglos que conforman 1024 GB a mas el programa no funciona.
Se podría tener acceso directamente a la tabla de direcciones de archivos
como lo era la FAT32 en su momento para poder obtener el total de los
nombres de archivos en forma rápida y sin impactar en la performance del
servidor.

Saludos y Gracias


ÿþM


ÿþM
Respuesta Responder a este mensaje
#7 Jose Luis Cocha
18/07/2009 - 20:30 | Informe spam
Estimado son Discos en Array

"langosta" escribió en el mensaje de
noticias:h3ndnj$3vl$
"Pedro Maicas" escribió en el mensaje de noticias
news:
On Wed, 15 Jul 2009 13:12:46 -0300, "langosta"
wrote:

Un tera son mil gigas. Un giga son mil megas. Un mega son mil kilos. Un
kilo son mil bytes.



Donde dice mil, lease 1024.





No sé si será un standard, pero es habitual que los fabricantes de discos
duros llamen giga a mil millones de bytes (10 ^ 9 y no 2 ^ 30), por lo
que 300 gigas serán 279,4 GB...


Saludos :-) - Pedro -

http://www.maicas.net/




email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida