Tiago Silva
Tiago Silva

Reputation: 254

System.NotSupportedException: 'The specified path format is not supported.'

I have a field in a table that needs to be filled with the path and the end of the XML file to create a new file in the directory called DONE. This is made so it can tidy the directory a bit since the ones that are done don't need to be in the same directory so they are copied from one place into another.

Why is there this error?

System.NotSupportedException: 'The specified path format is not supported.'

Console.WriteLine("Ficheiro processado: " + filename);
string rootFolderPath = @"C:\XMLFiles";
string destinationPath = @"C:\XMLFiles\DONE";
string[] fileList = Directory.GetFiles(rootFolderPath);
foreach (string file1 in fileList)
{
    string fileToMove = rootFolderPath + file1;
    string moveTo = destinationPath + file1;
    File.Move(fileToMove, moveTo);
    da.SP_Insert(filename, file.Name, batch.BatchClassName, batch.Name, batch.Description, 0, "", 1, moveTo );
} 

Upvotes: 0

Views: 1082

Answers (4)

Tiago Silva
Tiago Silva

Reputation: 254

This Problem was fixed this way.

                    using (OpenFileDialog openFileDialog1 = new OpenFileDialog())
                    {

                        if (openFileDialog1.ShowDialog() == DialogResult.OK)
                        {
                            string CaminhoInicial = openFileDialog1.FileName;
                            Guid g = Guid.NewGuid();
                            FileInfo fi = new FileInfo(CaminhoInicial);
                            File.Copy(CaminhoInicial, CaminhoFinal + g.ToString() + fi.Extension, true);
                            da.SP_Inserir_Imagem(id, g.ToString() + fi.Extension);
                        }

                    }

                    try
                    {


                        if (dt.Rows.Count != 0)
                        {
                            string NomeImagem = dt.Rows[0][0].ToString();
                            pictureBox1.Image = Image.FromFile(CaminhoFinal + NomeImagem.Replace(" ", ""));
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message + "    ||||    " + ex.StackTrace, "Erro", MessageBoxButtons.OK);
                    }

Also read this Microfost Docs post for more context. https://learn.microsoft.com/en-us/dotnet/api/system.io.fileinfo?view=net-5.0

Upvotes: 0

JayV
JayV

Reputation: 3271

The function Directory.GetFiles(rootFolderPath); returns the full path to the file, that is filename and directory. If, like you are trying, want the filename only, you will need to extract it.

The FileInfo class is very good at extracting the Filename only of a full path.

foreach (string file1 in fileList)
{
    FileInfo fi = new FileInfo(file1);
    string moveTo = Path.Combine( destinationPath, fi.Name);
    File.Move(file1, moveTo);
}

Upvotes: 3

Peter B
Peter B

Reputation: 24137

GetFiles returns full paths; not just filenames:

Returns the names of files (including their paths) in the specified directory

So for the source files you don't need to combine anything, and for the target path you need to split off the filename first before combining:

foreach (string file1 in fileList)
{
    string moveTo = Path.Combine(destinationPath, Path.GetFileName(file1));
    File.Move(file1, moveTo);
    // ...
} 

Upvotes: 2

Benzara Tahar
Benzara Tahar

Reputation: 2217

Rather than using string fileToMove = rootFolderPath + file1, try using System.IO.Path.Combine instead:

var fileToMove  = Path.Combine(rootFolderPath, file1);
var moveTo = Path.Combine(destinationPath , file1);

Upvotes: 2

Related Questions