Sono in esecuzione un programma molto semplice, che sta cercando di elencare i file in una cartella sulla stessa macchina, che è specificato utilizzando il formato UNC (come descritto in http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247%28v=vs.85%29.aspx):Il percorso UNC non funziona con .NET?
static string rootDir = @"\\?\d:\share\input";
static void Main(string[] args)
{
char[] invlidChars = Path.GetInvalidPathChars();
foreach (char invChar in invlidChars)
{
if (rootDir.Contains(invChar.ToString()))
{
Console.WriteLine("InvChar - {0}", invChar);
}
}
string[] matchFiles = Directory.GetFiles(rootDir);
}
Tuttavia Directory.GetFiles() non funziona e genera un'eccezione ArgumentException (che viene generata quando - il percorso è una stringa di lunghezza zero, contiene solo uno spazio bianco o contiene uno o più caratteri non validi come definito da InvalidPathChars.). Console.Writeline() non stampa nulla, il che conferma che non ci sono caratteri non validi nel percorso. Ricevo la stessa eccezione quando uso "\\ UNC \? \ D: \ share \ input" o "\\ UNC \? \ Machinename \ share \ input" o "\\? \ Machinename \ share \ input ".
"d: \ share \ input" è in effetti una cartella condivisa.
Qualcuno sa cosa potrebbe essere sbagliato?
Grazie!
Raccomando questa panoramica precedente ma ancora valida sui percorsi lunghi, la limitazione MAXPATH, il prefisso \\? \ E altri problemi .NET: http://blogs.msdn.com/b/bclteam/archive/2007/02/ 13/long-paths-in-net-part-1-of-3-kim-hamilton.aspx –
Grazie per il link Avner SK; Questo chiarisce il comportamento di .NET e Windows-API con percorsi lunghi. – whywhywhy