C#如何识别命令行参数中的目录路径并设置为当前工作目录
实现方案
你现有代码存在三处明显错误,修正后即可实现任意位置识别目录参数的需求:
- 类型、方法调用存在拼写/格式错误:
File.GettAttributes.Directory(path)、FileAttribute均为错误写法,正确获取路径属性的方法为File.GetAttributes(路径字符串),对应枚举类型为FileAttributes - 未过滤命令行开关:
-f、-v这类以-开头的是功能开关项,不是路径,直接作为路径做校验会触发异常 - 缺少存在性判断:直接对不存在的路径读取属性会抛出IO异常,需要先校验路径是否真实存在
实现逻辑非常直接:遍历所有传入的命令行参数,跳过开关项,对剩余参数校验是否为真实存在的目录,匹配到目标后设置为当前工作目录即可,完全不受参数所在位置影响。
完整可运行代码
using System; using System.IO; class Program { static void Main(string[] args) { foreach (string arg in args) { // 跳过所有以-开头的命令行开关 if (arg.StartsWith("-")) { continue; } // 校验当前参数是否为存在的目录 if (Directory.Exists(arg)) { Directory.SetCurrentDirectory(arg); // 若仅需要匹配第一个有效目录,找到后直接跳出循环即可 break; } } // 后续可编写你的业务逻辑,此处为测试验证代码 Console.WriteLine($"当前工作目录已设置为:{Directory.GetCurrentDirectory()}"); } }
补充说明
- 如果你的场景需要支持传入多个目录参数,去掉代码里的
break关键字,遍历完所有参数后按需处理每个匹配到的目录即可 - 如果后续新增的开关存在带参数值的情况(比如
-o output.txt这类格式),可以在现有过滤逻辑基础上扩展对应的参数解析规则,当前给出的代码可以完全覆盖你描述的两种命令执行场景 - 用
Directory.Exists()做前置校验比直接读取FileAttributes更稳妥,不会因为路径不存在抛出非预期的运行时异常
内容的提问来源于stack exchange,提问作者elfo23
相关产品推荐
相关产品推荐

