C#批量上传桌面文件到服务器报Compiler Error CS0136怎么解决
问题原因
你触发的Compiler Error CS0136为变量引用/命名冲突类错误,结合你提供的代码,具体问题有两个:
- 调用
UploadFile方法时传入的第二个参数fileName没有做任何声明定义,你拼接的文件完整路径存放在str变量中,也可以直接调用FileInfo自带的FullName属性获取路径,不需要自行拼接 - 手动拼接桌面路径的写法兼容性极差,如果用户修改过桌面默认存储位置,代码会直接运行报错
修复后可用代码
using System; using System.IO; using System.Net; namespace Upload { class Program { static void Main(string[] args) { // 直接获取系统桌面路径,兼容性更强 string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); // 服务器上传地址 string uriString = "https://webserver.com/test"; DirectoryInfo desktopDir = new DirectoryInfo(desktopPath); FileInfo[] desktopFiles = desktopDir.GetFiles(); foreach (FileInfo file in desktopFiles) { Console.WriteLine($"正在上传:{file.FullName}"); // WebClient实现了IDisposable接口,用using包裹可自动释放资源 using (WebClient myWebClient = new WebClient()) { // 直接传入FileInfo的FullName属性即可,不需要手动拼接路径 byte[] responseArray = myWebClient.UploadFile(uriString, file.FullName); Console.WriteLine($"上传完成,服务器响应长度:{responseArray.Length}"); } } } } }
补充注意事项
- 如果服务器需要身份验证,要提前给
myWebClient.Credentials属性赋值对应的账号密码 - 测试场景下如果使用自签名SSL证书需要跳过校验,可以在代码开头加
ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true;,生产环境不建议使用该配置 - WebClient属于较老的API,.NET Core/.NET 5+环境更推荐使用HttpClient实现上传逻辑
内容的提问来源于stack exchange,提问作者BeatONE
相关产品推荐
相关产品推荐

