Se me pidió que hiciera una fotocopiadora de archivos que cambiara el nombre de un archivo, agregando "_Copy", pero mantendría el tipo de archivo.

Por ejemplo:

c:\...mike.jpg

Para:

c:\...mike_Copy.jpg

Aquí está mi código:

private void btnChseFile_Click(object sender, EventArgs e)
{
    prgrssBar.Minimum = 0;
    OpenFileDialog ofd = new OpenFileDialog();
    ofd.Title = "Which file do you want to copy ?";            

    DialogResult fc = ofd.ShowDialog();                       
    tbSource.Text = ofd.FileName;
    tbDestination.Text = tbSource.Text + "_Copy";          
}
-3
Elad Tzabari 14 dic. 2016 a las 14:09

2 respuestas

La mejor respuesta

Puedes usar las clases System.IO.FileInfo y System.IO.Path para hacer lo que parece que estás intentando:

OpenFileDialog od = new OpenFileDialog();
if(od.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
    System.IO.FileInfo fi = new System.IO.FileInfo(od.FileName);
    string oldFile = fi.FullName;

    string newFile = oldFile.Replace(System.IO.Path.GetFileNameWithoutExtension(oldFile), 
        string.Format("{0}_Copy", 
            System.IO.Path.GetFileNameWithoutExtension(oldFile)));
    MessageBox.Show(newFile);
}

Luego puede llamar a lo siguiente para realizar la copia:

System.IO.File.Copy(oldFile, newFile);
0
gmiley 14 dic. 2016 a las 11:24

Está agregando _Copy al final del nombre del archivo y no antes de la extensión. Debe agregarlo antes de la extensión:

string destFileName = $"{Path.GetFileNameWithoutExtension(ofd.FileName)}_Copy{Path.GetExtension(ofd.FileName)}";

O sin C # 6:

string destFileName = String.Format("{0}_Copy{1}",
                                    Path.GetFileNameWithoutExtension(ofd.FileName),
                                    Path.GetExtension(ofd.FileName));

Luego, para obtener la ruta completa al archivo, use:

string fullPath = Path.Combine(Path.GetDirectoryName(ofd.FileName, destFileName));

Luego, para realizar la copia real, simplemente use:

File.Copy(ofd.FileName, fullPath);
0
TheLethalCoder 14 dic. 2016 a las 11:31