C# Visual Studio:不支持给定路径错误

C# Visual Studio:不支持给定路径错误,c#,visual-studio,path,C#,Visual Studio,Path,我正在开发一个程序,它将读入一个.lsp文件,读取它,部分理解并对其进行注释,然后将编辑后的版本写回带有.txt附件的同一目录。我遇到的问题是,当我尝试运行程序时,VisualStudio抛出了一个“不支持给定路径”错误,这可能是由于我的一些疏忽。有人能发现我的代码中会导致文件路径无效的部分吗 Stream myStream = null; OpenFileDialog openFileDialog1 = new OpenFileDialog(); openFileDialog1.Initia

我正在开发一个程序,它将读入一个.lsp文件,读取它,部分理解并对其进行注释,然后将编辑后的版本写回带有.txt附件的同一目录。我遇到的问题是,当我尝试运行程序时,VisualStudio抛出了一个“不支持给定路径”错误,这可能是由于我的一些疏忽。有人能发现我的代码中会导致文件路径无效的部分吗

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()
。这都是真的,但不是答案。托马斯,这可能不是答案,但遵循我的建议会指出问题。这都是真的,但不是答案。托马斯,这可能不是答案,但遵循我的建议会指出问题。