Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

179
Views
Evitar la barra invertida en la creación de rutas en .NET para la implementación multiplataforma

Tengo una aplicación .NET heredada que he portado a .NET 6.0 y estoy ejecutando en varias plataformas (Windows y Linux).

Gran parte del código heredado se desarrolló con la creación de rutas codificadas de forma rígida, utilizando una barra invertida en las cadenas, como

 new StreamWriter(FeuxBarreFolderName + @"\\JazzSchmazz.txt");

que he convertido en algo como

 new StreamWriter(Path.Combine(FeuxBarreFolderName, "JazzSchmazz.txt"));

Quiero evitar que cualquier desarrollador agregue accidentalmente o deliberadamente \ en una ruta codificada nuevamente. Además de manejar esto en la revisión del código, ¿hay alguna manera de que pueda hacerlo automáticamente, ya sea mediante el análisis del código o una falla espectacular en el momento de la prueba? Mis búsquedas han sido inútiles.

Ideas que he tenido

  • Modifique el sistema de archivos ext4 en mis pruebas de integración de Docker para evitar nombres de archivo con \. No tengo idea si esto es posible/razonable.
  • Sea creativo con los permisos en mis pruebas de integración de Docker para evitar la creación de archivos en un directorio raíz (elimine w del directorio principal), pero permítalo en el directorio secundario (agregue w nuevamente a un directorio secundario específico). Esto se siente súper frágil.
  • Encuentre o escriba un analizador para mirar cadenas y quejarse de cualquier cadena que contenga un carácter \.

¿Hay una mejor manera aquí?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Como no hay una forma integrada de protegerse contra esto en el momento del desarrollo o la ejecución, agregaré este código para que se ejecute después de mis pruebas de integración. Barrirá el sistema de archivos y generará una excepción si encuentra archivos o directorios creados con un carácter inapropiado (barra invertida).

También quería agregar una verificación de dos puntos, en caso de que la gente estuviera creando rutas como "c:\feux\barre.txt", pero parece que al menos NuGet crea directorios con dos puntos (por ejemplo, ~/.local/share/NuGet/v3-cache/670c1461c29885f9aa22c281d8b7da90845b38e4$ps:_api.nuget.org_v3_index.json )

 void walkTree(System.IO.DirectoryInfo dirInfo, Action<System.IO.FileSystemInfo> action) { try { foreach (var file in dirInfo.GetFiles()) action(file); } catch (System.IO.DirectoryNotFoundException) { } try { foreach (var subdir in dirInfo.GetDirectories()) { action(subdir); walkTree(subdir, action); } } catch (System.UnauthorizedAccessException) { } catch (System.IO.DirectoryNotFoundException) { } catch (System.Security.SecurityException) { } } foreach (var drive in System.Environment.GetLogicalDrives()) { var driveInfo = new System.IO.DriveInfo(drive); if (!driveInfo.IsReady) continue; walkTree(driveInfo.RootDirectory, (FileSystemInfo fi) => { if (fi.Name.Contains('\\')) throw new InvalidOperationException($"'{fi.FullName}' was created with an inappropriate character"); }); }
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!