C#folderbrowser对话框问题

C#folderbrowser对话框问题,c#,C#,我有一个按钮,单击后使用stremReader读取文本文件,使用folderbrowser对话框保存文件。保存文件并再次单击按钮后,我会收到一个错误,说明它找不到文本文件,它会尝试从保存前一个文档的路径读取文本文件 有什么办法可以解决这个问题吗 以下是代码的一部分: private void Invoice_Load(object sender, EventArgs e) { try { StreamReader sr = new StreamReader(@".

我有一个按钮,单击后使用stremReader读取文本文件,使用folderbrowser对话框保存文件。保存文件并再次单击按钮后,我会收到一个错误,说明它找不到文本文件,它会尝试从保存前一个文档的路径读取文本文件

有什么办法可以解决这个问题吗

以下是代码的一部分:

private void Invoice_Load(object sender, EventArgs e)
{
    try
    {
        StreamReader sr = new StreamReader(@"../../DatabasePath");
        dataBase = sr.ReadLine();

        if (dataBase == null)
        {
            MessageBox.Show("Please use this to choose the location of the database.");
            Process.Start(@"..\..\DatabaseChooser.exe");
            ready = false;
        }

        if (!ready)
        {
            while (IsProcessOpen("DatabaseChooser"))
            {
                ready = false;
            }
            ready = true;

            if (ready)
            {
                doIfReady();
            }
        }

        else if (ready)
        {
            doIfReady();
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

private void btnCreateInvoice_Click(object sender, EventArgs e)
{
    int SelectColumnIndex = 5;

    foreach (DataGridViewRow row in dataGridViewInvoice.Rows)
    {
        if (row.Cells[SelectColumnIndex].Value != null &&
               Convert.ToBoolean(row.Cells[SelectColumnIndex].Value) == true)
        {
            foreach (DataGridViewCell cell in row.Cells)
            {
                if (cell.OwningColumn.Index != SelectColumnIndex)
                {
                    data += (cell.Value + "          "); // do some thing                              
                }
            }
            data += System.Environment.NewLine;
            total += (int)row.Cells["TotPrice"].Value;
        }
    }

    MessageBox.Show("Please choose your invoice template", "Template");
    OpenFileDialog op = new OpenFileDialog();
    op.ShowHelp = true;
    op.Filter = "Microsoft Word Documents 97-2003 (*.doc)|*.doc|Microsoft Word 2007 (*.docx)|*.docx";
    if (op.ShowDialog() == DialogResult.Cancel)
    {
        this.Hide();
    }

    MessageBox.Show("Please choose where you want to save the invoice", "Save");
    FolderBrowserDialog fd = new FolderBrowserDialog();
    fd.Description = "Please choose";
    if (fd.ShowDialog() == DialogResult.Cancel)
    {
        this.Hide();
    }

    string path = fd.SelectedPath + "\\" + txtFileName.Text + ".doc";

    CreateWordDoc(op.FileName, path);
}

首先,您可能想发布一些代码。其次,您应该使用来保存文件,而不是FolderBrowser。

首先,您可能需要发布一些代码。其次,您应该使用来保存文件,而不是FolderBrowser。

我认为您应该更改此部分

StreamReader sr = new StreamReader(@"../../DatabasePath");
使用绝对路径。
例如:

string dir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
这里的dir是主exe dir。
当您使用OpenDialog时,当前路径可能会更改,因此您将无法使用再次找到路径。/../


还有一件事:当您使用
Process.Start(@.\..\DatabaseChooser.exe)时
您等待流程完成:我认为如果您创建一个
流程ps
并使用
ps.WaitForExit()

我认为您应该更改此部分

StreamReader sr = new StreamReader(@"../../DatabasePath");
使用绝对路径。
例如:

string dir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
这里的dir是主exe dir。
当您使用OpenDialog时,当前路径可能会更改,因此您将无法使用再次找到路径。/../


还有一件事:当您使用
Process.Start(@.\..\DatabaseChooser.exe)时
您等待流程完成:我认为如果您创建一个
流程ps
并使用
ps.WaitForExit()

,您会做得更好。我假设您在以下方面遇到问题:

StreamReader sr = new StreamReader(@"../../DatabasePath"); 
将其更改为:

File f = new File(@"../../DatabasePath");
然后执行f.GetAbsolutePath以找出它实际获取文件的位置

还有几点意见:

if (op.ShowDialog() == DialogResult.Cancel)
{
  this.Hide();                    
} 

如果用户点击“取消”,代码仍将尝试运行。并尝试创建WordDoc。

我假设您在以下方面遇到问题:

StreamReader sr = new StreamReader(@"../../DatabasePath"); 
将其更改为:

File f = new File(@"../../DatabasePath");
然后执行f.GetAbsolutePath以找出它实际获取文件的位置

还有几点意见:

if (op.ShowDialog() == DialogResult.Cancel)
{
  this.Hide();                    
} 

如果用户点击“取消”,代码仍将尝试运行。并尝试创建WordDoc。

请发布您编写的代码。它要查找的是原始文本文件还是您应该保存的文本文件?所有这些操作都发生在您单击两次的一个按钮上?请发布您编写的代码。它在查找哪个文本文件,是原始的还是您应该保存的?所有这些动作都发生在你点击两次的一个按钮上?嗨,马可,它仍然不起作用。当我第一次单击按钮时,当再次单击按钮时,它尝试从我的桌面读取文本文件,我将其设置为使用绝对路径。请确保您已经使用了这行代码,字符串dir=Path.GetDirectoryName(Assembly.getExecutionGassembly().Location);,它在第一次工作时,但当我再次单击按钮时,它会尝试从桌面读取文件。@Jason:我现在不在,但今晚我要帮助ypu。耐心点:)嗨,马可……我真的很感谢你的帮助。在这一行代码的帮助下,我已经解决了这个问题。非常感谢。嗨,马可,它仍然不起作用。当我第一次单击按钮时,当再次单击按钮时,它尝试从我的桌面读取文本文件,我将其设置为使用绝对路径。请确保您已经使用了这行代码,字符串dir=Path.GetDirectoryName(Assembly.getExecutionGassembly().Location);,它在第一次工作时,但当我再次单击按钮时,它会尝试从桌面读取文件。@Jason:我现在不在,但今晚我要帮助ypu。耐心点:)嗨,马可……我真的很感谢你的帮助。在这一行代码的帮助下,我已经解决了这个问题。谢谢。