.NET 6 C#控制台访问FTP路径被转为C盘路径报错求助
问题解决:UNC/FTP路径被错误解析为本地C盘路径
问题原因
你使用的//corp/Test/Test.txt写法不规范,.NET的System.IO类无法正确识别:
- 如果是局域网UNC共享路径,Windows要求必须以双反斜杠开头(
\\corp\Test\Test.txt),正斜杠//会被解析为错误的本地路径; - 如果是FTP路径,
System.IO类不支持FTP协议,必须用专用的FTP请求API处理。
解决方案分两种情况处理
情况1:这是局域网UNC共享路径
- 修正路径格式
将路径改为标准UNC格式:\\corp\Test\Test.txt(用反斜杠,且开头是两个反斜杠),代码里可以用@符号避免转义:using System.IO; var uncFilePath = @"\\corp\Test\Test.txt"; if (File.Exists(uncFilePath)) { var fileContent = File.ReadAllText(uncFilePath); Console.WriteLine(fileContent); } else { Console.WriteLine("文件不存在或当前账户无访问权限"); } - 排查访问权限
- 确认运行程序的账户(比如本地账户、域账户)拥有该共享文件夹的读取权限;
- 可以先在文件资源管理器里输入
\\corp\Test测试是否能正常访问,排除权限和网络问题。
情况2:这是FTP服务器路径
如果实际是FTP地址(比如ftp://corp/Test/Test.txt),不能用System.IO类,需使用FtpWebRequest(.NET内置)处理:
using System.Net; using System.IO; var ftpUrl = "ftp://corp/Test/Test.txt"; var credentials = new NetworkCredential("你的FTP用户名", "你的FTP密码"); var request = (FtpWebRequest)WebRequest.Create(ftpUrl); request.Credentials = credentials; request.Method = WebRequestMethods.Ftp.DownloadFile; request.UsePassive = true; // 多数FTP服务器需要被动模式 using (var response = (FtpWebResponse)request.GetResponse()) using (var responseStream = response.GetResponseStream()) using (var reader = new StreamReader(responseStream)) { var fileContent = reader.ReadToEnd(); Console.WriteLine(fileContent); }
内容的提问来源于stack exchange,提问作者abhi
相关产品推荐
相关产品推荐

