Search code examples
c#itextfilestream

FileStream says it cant find a part of the path


enter image description hereSo i have this console app that looks through a folder for files, this folder only has .tiff images and the whole point of the app is convert them all into pdf files and finally merge them, and so I have this foreach cycle

        foreach (var path in Directory.GetFiles(@"C:/Users/tferreira/Desktop/TIF_MarcadAgua"))
        {
            Console.WriteLine(path); // full path
            Console.WriteLine(System.IO.Path.GetFileName(path)); // file name

            Escrever("A fazer pdf");

            imagens.Add(path.ToUpper().Replace("A.TIF", "A.PDF").Replace("A.tif", "A.PDF"));
            FazerPdf(path);
            if (File.Exists(path.ToUpper().Replace("A.TIF", "B.TIF")))
            {
                imagens.Add(path.ToUpper().Replace("A.TIF", "B.PDF"));

                FazerPdf(path.ToUpper().Replace("A.TIF", "B.TIF"));
            }
            Escrever("O pdf foi gerado com sucesso. Caminho : " + path.ToUpper().Replace("A.TIF", "A.PDF").Replace("A.tif", "A.PDF"));

            Escrever("Vai fazer o merge de todos os pdfs gerados.");

            PdfMerge pm = new PdfMerge();
            foreach (string imagem in imagens)
            {
                pm.AddDocument(imagem);
                npages++;
            }
        }

And what is does is run trough the folder getting all the files and storing the path in that var path variable.

But when it´s actually time to make the pdf it gives that error i mentioned up top.

The line the error happens is this the fazerPDF funtion, thats where the pdf is made, since its a filepath error i will only show the error line since it keeps things easy to see.

    using (FileStream stream = new FileStream(Path.Replace("TIF", "PDF"), FileMode.Create, FileAccess.Write))
    {
        // some code 
    }

Things i know, the images do exist, the folder does exist. Thanks for the help, if i myself find out what it is ill post a answer.

EDIT:

fazerPDF function

static public void FazerPdf(string Path)
    {
        string newPath = System.IO.Path.ChangeExtension(Path, ".pdf");
        if (!File.Exists(Path.Replace("TIF", "PDF")))
          
            using (FileStream stream = new FileStream(newPath.Replace("TIF", "PDF"), FileMode.Create, FileAccess.Write))
            {

Solution

  • The problem seems to be this line:

    using (FileStream stream = new FileStream(Path.Replace("TIF", "PDF"), FileMode.Create, FileAccess.Write))
    

    This will replace all instances of "TIF" in Path with "PDF", no matter where they appear. For example:

    c:\TIFs\IlikeTIFfiles\MyTIF.TIF
    

    Would become:

    c:\PDFs\IlikePDFfiles\MyPDF.PDF
    

    If you simply want to replace the file extension part of the path, you can use Path.ChangeExtension to cut off the old extension and add the new one:

    string newPath = System.IO.Path.ChangeExtension(path, ".pdf");
    using (FileStream stream = new FileStream(newPath, FileMode.Create, FileAccess.Write))
    

    Taking the example above, @"c:\TIFs\IlikeTIFfiles\MyTIF.TIF" would become @"c:\TIFs\IlikeTIFfiles\MyTIF.pdf"

    See it in action.