Why one file out of two hundred refuses to copy

A copy of two hundred files finishes with one error and no useful message. The cause is almost always the name rather than the contents, and there are only about six causes worth knowing.

Updated:

Characters Windows will not accept

Nine characters are forbidden in Windows file names: \ / : * ? " < > |. macOS and Linux allow most of them — on Linux only / is off limits — so a file named Q3: final?.xlsx is perfectly legal on a Mac and cannot be written to a Windows disk at all.

Two more rules catch people out. Windows silently strips trailing spaces and dots, so report .pdf and report.. do not survive the trip. And a set of names is reserved for historical device files: CON, PRN, AUX, NUL, COM1COM9, LPT1LPT9, with or without an extension. A file called con.txt cannot exist on Windows, which is a genuinely surprising failure the first time you meet it.

The 260-character path limit

Windows has historically limited a full path — drive, every folder, the file name, the extension — to 260 characters. Not the file name: the whole path. It is why a folder tree that worked fine breaks the moment someone extracts it two levels deeper than you did, and why the error appears on some files in a zip and not others.

Long-path support exists on modern Windows but is off by default and not honoured by every application. The reliable fix is to extract closer to the root: C:\tmp\ rather than a path that already runs through Users, a name, Desktop and three project folders before your archive even starts.

Advertisement

Turkish characters, and mojibake inside zips

The zip format did not originally specify an encoding for file names. Archivers wrote them in the local code page, so a zip made on a Turkish Windows machine stores çalışma-özeti.docx in Windows-1254 — and on any machine that assumes UTF-8, that comes out as çalışma. The file is intact; only its name is unreadable.

Modern archivers set a UTF-8 flag and mostly get this right, but Windows Explorer's built-in zip handling is the weak link in both directions. If you are sending an archive with non-ASCII names to someone whose system you do not know, either make it with 7-Zip and force UTF-8, or rename to ASCII before archiving.

There is a second, subtler Turkish problem: the dotted and dotless i. Case-insensitive systems fold Ii, but Turkish has Iı and İi. Software that uppercases a name using Turkish locale rules can turn file.txt into FİLE.TXT, and a lookup that expected FILE.TXT then fails. It is rare, and utterly baffling when it happens.

Two names that look identical but are not

Unicode can write an accented character two ways: as one code point (ö), or as a plain letter plus a combining mark (o + ¨). macOS has traditionally stored file names in the decomposed form; Windows and Linux use the composed one. The two render identically on screen and are different byte sequences.

The result: a folder synced from a Mac can show what appear to be two copies of the same file, a script that looks for görsel.png does not find the görsel.png sitting right there, and a de-duplicator sees no duplicates. If a name looks right and nothing matches it, this is the answer.

Case sensitivity adds to it. Linux treats Photo.jpg and photo.jpg as two files; Windows and macOS by default do not. Copying such a folder to a Mac loses one of them, and the copy reports success.

Names that will not cause any of this

  1. Stick to ASCII for anything crossing a system boundary — letters, digits, hyphen, underscore, dot.
  2. Use hyphens instead of spaces. Spaces survive fine in file managers and cause endless quoting problems in scripts, URLs and command lines.
  3. Start with the date, ISO first: 2026-09-08-quarterly-report.pdf. It sorts chronologically by name in every system on earth.
  4. Keep names under about 80 characters and folder trees shallow, so nobody meets the path limit.
  5. Never rely on case alone to tell two files apart. One of them will disappear.
  6. Do not put a colon in a name to write a time or a ratio. It is the single most common forbidden character, and it comes from typing a time naturally.

More guides

Try SendMyFile

Encrypt a file in your browser and hand it over with a 9-digit code. No account, and it deletes itself.

Try SendMyFile