---
title: "An error occurred while updating Visual Portfolio Pro: Could not create directory"
date: 2022-05-06
author: "nK"
---

# An error occurred while updating Visual Portfolio Pro: Could not create directory

## Symptom

Updating Pro fails with **An error occurred while updating Visual Portfolio Pro: Could not create directory. visual-portfolio-pro/assets**.

## Cause

Windows servers limit a path to about 250 characters. WordPress builds the name of the temporary download file from the signed download URL, which is long, and the resulting path goes over the limit.

## Fix

Add a must-use plugin that shortens the temporary file name for plugin package downloads. Create the file `wp-content/mu-plugins/visual-portfolio-pro-windows-compat.php` and paste this into it:

```
<?php
/**
 * Plugin Name: Visual Portfolio Pro Windows Server Compatibility
 * Plugin URI: https://staging.visualportfolio.com/docs/troubleshooting/an-error-occurred-while-updating-visual-portfolio-pro-could-not-create-directory/
 * Description: Resolves an issue on Windows servers that prevents Visual Portfolio Pro from automatically updating.
 */

/**
 * @link https://gist.github.com/spivurno/d7a93ab4920c4fa88bad0e5177b45ba1
 * Easy Digital Downloads provides packages URLs that look something like this:
 * 
 * http://mysite.com/edd-sl/package_download/MTQ4NjA1NTA0NjphMDA5MTkzZjQ0NGRiNmVmMzczY2JhNTFiZWIxMWZiYzo0NzM3MzphM2Q5ZDA3NDQwMjZjZDFmOWVhYTBiNzBjMjVlZjI0YjpodHRwQC8vbXVzaWNmZXN0aXZhbC5zY2hvb2wubno
 * 
 * This generates a temporary filename for the update process that look something like this:
 * 
 * MTQ4NjA1NTA0NjphMDA5MTkzZjQ0NGRiNmVmMzczY2JhNTFiZWIxMWZiYzo0NzM3MzphM2Q5ZDA3NDQwMjZjZDFmOWVhYTBiNzBjMjVlZjI0YjpodHRwQC8vbXVzaWNmZXN0aXZhbC5zY2hvb2wubno.tmp
 *
 * Some Windows servers choke on filenames of this size. As a result, the update wil fail and WordPress
 * will give you a "Could not copy file." error.
 *
 * This solution (which is a little weird) will check if the package URL that is about to be downloaded 
 * by WordPress is an EDD package URL. If so, it will truncate the temporary filename to 50 characters.
 */
 
// initiate a fix for Windows servers where the GP package file name is too long and prevents installs/updates from processing
add_filter( 'upgrader_pre_download', 'mu_gkt_pro_maybe_shorten_edd_filename', 10, 4 );

/**
 * Check if the URL that is about to be downloaded is an EDD package URL. If so, hook our function to shorten
 * the filename.
 *
 * @param mixed  $return
 * @param string $package The URL of the file to be downloaded.
 *
 * @return mixed
 */
function mu_gkt_pro_maybe_shorten_edd_filename( $return, $package ) {
    if( strpos( $package, '/edd-sl/package_download/' ) !== false ) {
        add_filter( 'wp_unique_filename', 'mu_gkt_pro_shorten_edd_filename', 10, 2 );
    }

    return $return;
}

/**
 * Truncate the temporary filename to 50 characters. This resolves issues with some Windows servers which
 * can not handle very long filenames.
 *
 * @param string $filename
 * @param string $ext
 *
 * @return string
 */
function mu_gkt_pro_shorten_edd_filename( $filename, $ext ) {
    $filename = substr( $filename, 0, 50 ) . $ext;
    remove_filter( 'wp_unique_filename', 'mu_gkt_pro_shorten_edd_filename', 10 );

    return $filename;
}
```

Files in `wp-content/mu-plugins/` are active as soon as they exist; there is nothing to activate. Run the update again after saving the file. You can delete the file once the update is done, or keep it: it only affects downloads of this plugin’s package.