如何为下载文件提供自定义位置

时间:2014-07-30 20:43:01

标签: c# sql sql-server visual-studio-2010 visual-studio

我只想知道如何为抓取文件提供自定义默认位置。 我已将文件上传到本地数据库,并且我已将文件绑定到网格。当我按下它时,显示一个名为的错误,“找不到位置文件”

如果我将特定上传的文件复制到指定位置,我可以轻松下载。 所以我只需要知道如何提供默认位置,以便我可以从同一个位置上传和下载文件。

错误快照:https://imageshack.com/i/ewTrmAI2j

使用自定义文件夹路径编辑相同的下面的代码。但我不知道为什么总是从 bin / debug / 文件夹中询问该文件。为什么会发生这样的事情。有没有办法我可以对这个文件夹进行更改..除了 bin / debug / 文件夹

代码:

 private void DownloadAttachment(DataGridViewCell dgvCell)
    {
        string fileName = Convert.ToString(dgvCell.Value);

        //Return if the cell is empty
        if (fileName == string.Empty)
            return;

        FileInfo fileInfo = new FileInfo(fileName);
        string fileExtension = fileInfo.Extension;

        byte[] byteData = File.ReadAllBytes(fileInfo.FullName); - - - - <<<<< ERROR HERE

        //show save as dialog
        using (SaveFileDialog saveFileDialog1 = new SaveFileDialog())
        {
            //Set Save dialog properties
            saveFileDialog1.Filter = "Files (*" + fileExtension + ")|*" + fileExtension;
            saveFileDialog1.Title = "Save File as";
            saveFileDialog1.CheckPathExists = true;
            saveFileDialog1.FileName = fileName;

            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                string s = cncInfoDataGridView.Rows[dgvCell.RowIndex].Cells[1].Value.ToString();
                File.WriteAllBytes(saveFileDialog1.FileName, byteData);
                byteData = System.Text.Encoding.ASCII.GetBytes(s);
            }
        }
    }

2 个答案:

答案 0 :(得分:0)

FileInfo()构造函数仅适用于完整文件路径。听起来你正在尝试使用只有文件名的构造函数,此时当你尝试读取文件时它会失败,因为它不是一个有效的路径。处理这个问题有几种可能性:

  1. 创建自己的继承自FileInfo()的MyFileInfo()类,并添加一个将特定路径追加到文件名的构造函数。

  2. 只需在代码中将该路径内嵌到:

    var myPath = @“c:\ folder \ stuff \”; FileInfo fileInfo = new FileInfo(myPath + fileName);

  3. 通常情况下,路径会在app.config中设置为设置,因此您可以根据需要轻松更改。

答案 1 :(得分:0)

我找到了答案

编码gridview的绑定文件路径并使用文件路径下载文件

private void UploadAttachment(DataGridViewCell dgvCell)
    {
        using (OpenFileDialog fileDialog = new OpenFileDialog())
        {
            //Set File dialog properties
            fileDialog.CheckFileExists = true;
            fileDialog.CheckPathExists = true;
            fileDialog.Filter = "All Files|*.*";
            fileDialog.Title = "Select a file";
            fileDialog.Multiselect = true;

            if (fileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                string strfilename = fileDialog.FileName;
                cncInfoDataGridView.Rows[dgvCell.RowIndex].Cells[1].Value = strfilename;
            }
        }
    }

    /// <summary>
    /// Download Attachment from the provided DataGridViewCell
    /// </summary>
    /// <param name="dgvCell"></param>
    private void DownloadAttachment(DataGridViewCell dgvCell)
    {
        string fileName = Convert.ToString(dgvCell.Value);

        if (!string.IsNullOrEmpty(fileName))
        {

            byte[] objData;

            FileInfo fileInfo = new FileInfo(fileName);
            string fileExtension = fileInfo.Extension;

            //show save as dialog
            using (SaveFileDialog saveFileDialog1 = new SaveFileDialog())
            {
                //Set Save dialog properties
                saveFileDialog1.Filter = "Files (*" + fileExtension + ")|*" + fileExtension;
                saveFileDialog1.Title = "Save File as";
                saveFileDialog1.CheckPathExists = true;
                saveFileDialog1.FileName = fileName;

                if (saveFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    string s = cncInfoDataGridView.Rows[dgvCell.RowIndex].Cells[1].Value.ToString();
                    objData = File.ReadAllBytes(s);
                    File.WriteAllBytes(saveFileDialog1.FileName, objData);
                }
            }
        }
    }

}