C# Visual Studio:不支持给定路径错误
我正在开发一个程序,它将读入一个.lsp文件,读取它,部分理解并对其进行注释,然后将编辑后的版本写回带有.txt附件的同一目录。我遇到的问题是,当我尝试运行程序时,VisualStudio抛出了一个“不支持给定路径”错误,这可能是由于我的一些疏忽。有人能发现我的代码中会导致文件路径无效的部分吗C# Visual Studio:不支持给定路径错误,c#,visual-studio,path,C#,Visual Studio,Path,我正在开发一个程序,它将读入一个.lsp文件,读取它,部分理解并对其进行注释,然后将编辑后的版本写回带有.txt附件的同一目录。我遇到的问题是,当我尝试运行程序时,VisualStudio抛出了一个“不支持给定路径”错误,这可能是由于我的一些疏忽。有人能发现我的代码中会导致文件路径无效的部分吗 Stream myStream = null; OpenFileDialog openFileDialog1 = new OpenFileDialog(); openFileDialog1.Initia
Stream myStream = null;
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.InitialDirectory = @"C:\Users\Administrator\Documents\All Code\clearspan-autocad-tools-development\Code\Lisp";
openFileDialog1.Filter = "LISP files (*.lsp)|*.lsp|All files (*.*)|*.*";
openFileDialog1.FilterIndex = 2;
openFileDialog1.RestoreDirectory = true;
string loc;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
try
{
if ((myStream = openFileDialog1.OpenFile()) != null)
{
using (myStream)
{
string[] lines = File.ReadAllLines(openFileDialog1.FileName);
// saves the document with the same name of the LISP file, but with a .txt file extension
using (StreamWriter sr = new StreamWriter(openFileDialog1.InitialDirectory + "\\" + openFileDialog1.FileName.Substring(0, openFileDialog1.FileName.Length - 4) + ".txt"))
{
foreach (string line in lines)
{
sr.WriteLine(line);
}
}
}
}
}
catch (Exception ex)
{
MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
}
}
编辑:文件路径变量显示为“C:\Users\Administrator\Documents\All Code\clearspan autocad tools development\Code\Lisp\heel.lsp”
此外,错误发生在我尝试初始化StreamWriter并将文件路径调整为.txt文件的行上。您的代码有几个问题 错误处理: 由于错误处理,您显然不知道错误发生在哪一行。在调试时,不使用它可能会很有用 循环: 您将整个输入文件拉入内存,然后循环每一行来写入它。如果要处理的文件足够小,这将起作用,但我会将
foreach
循环移到读取文件的块之外
字符串解析:
我建议将路径和文件名存储在变量中,而不仅仅是引用控件。这将使它更具可读性。另外,System.IO.Path.Combine()
可以帮助构建路径,而无需担心字符串连接
总体:
您可能希望将其重构为一个方法,签名如下:
void ProcessLispFile(string inputFile, string outputFile) { }
您的代码有几个问题 错误处理: 由于错误处理,您显然不知道错误发生在哪一行。在调试时,不使用它可能会很有用 循环: 您将整个输入文件拉入内存,然后循环每一行来写入它。如果要处理的文件足够小,这将起作用,但我会将
foreach
循环移到读取文件的块之外
字符串解析:
我建议将路径和文件名存储在变量中,而不仅仅是引用控件。这将使它更具可读性。另外,System.IO.Path.Combine()
可以帮助构建路径,而无需担心字符串连接
总体:
您可能希望将其重构为一个方法,签名如下:
void ProcessLispFile(string inputFile, string outputFile) { }
openFileDialog.FileName
已经包含路径,因此将其与openFileDialog.InitialDirectory
结合使用会使其成为类似于C:\…\C:\…
的路径,这是无效的
所以,只要使用
var txtFile= Path.ChangeExtension(openFileDialog1.FileName, ".txt");
openFileDialog.FileName
已经包含路径,因此将其与openFileDialog.InitialDirectory
结合使用会使其成为类似于C:\…\C:\…
的路径,这是无效的
所以,只要使用
var txtFile= Path.ChangeExtension(openFileDialog1.FileName, ".txt");
openFileDialog.FileName
返回文件的完整路径,而不仅仅是函数所暗示的文件名
因此,尝试将其与openFileDialog.InitialDirectory
组合会产生一个与预期不同的字符串
您可以使用change extension方法将其更改为输出的文件类型
var txtFile=Path.ChangeExtension(openFileDialog1.FileName,“.txt”)
openFileDialog.FileName
返回文件的完整路径,而不仅仅是函数所暗示的文件名
因此,尝试将其与openFileDialog.InitialDirectory
组合会产生一个与预期不同的字符串
您可以使用change extension方法将其更改为输出的文件类型
var txtFile=Path.ChangeExtension(openFileDialog1.FileName,“.txt”)
哪一行抛出错误?那一行上变量的运行时值是什么?旁白:通过使用
System.IO.Path
提供的方法,可以避免所有讨厌的字符串操作。即Path.Combine()
和Path.ChangeExtension()
。哪一行抛出错误?那一行上变量的运行时值是什么?旁白:通过使用System.IO.Path
提供的方法,可以避免所有讨厌的字符串操作。即Path.Combine()
和Path.ChangeExtension()
。这都是真的,但不是答案。托马斯,这可能不是答案,但遵循我的建议会指出问题。这都是真的,但不是答案。托马斯,这可能不是答案,但遵循我的建议会指出问题。