İşletim sistemine bağlı olarak dosya adlarında izin verilen karakterlerin listesini nerede bulabilirim? (örneğin Linux'ta, :
dosya adlarında karaktere izin verilir, ancak Windows'ta izin verilmez)
İşletim sistemine bağlı olarak dosya adlarında izin verilen karakterlerin listesini nerede bulabilirim? (örneğin Linux'ta, :
dosya adlarında karaktere izin verilir, ancak Windows'ta izin verilmez)
Yanıtlar:
Wikipedia Dosya Adı sayfasından başlamalısınız . Oldukça fazla dosya sistemi için ayrılmış karakterleri listeleyen düzgün bir tabloya ( Dosya adı sınırlamalarının karşılaştırılması ) sahiptir.
Ayrıca, MS-DOS altında ayrılmış dosya adları da dahil olmak üzere, her dosya sistemi hakkında başka bilgiler de içerir CON
. Ben kısaltılmış zaman keresinde tarafından ısırıldı çünkü sadece bir dosya bulunmaktadır söz const.h
etmek con.h
ve derleyici asılı neden bulmaktan yarım saat geçirdi.
DOS üzerinden Dönüşler göz ardı böylece cihazlar için uzantıları con.h
tam olarak aynıydı con
giriş konsoluna, (tabii, yani beni etmek için, derleyici bekliyordu yazın o devam edeceğini önce başlık dosyası).
POSIX "Fully portable filenames"
olan, aşağıdakileri listeleyen girişe bakmaktır :A–Z a–z 0–9 . _ -
Tamam, şu an dosya sistemlerinin Karşılaştırma yalnızca ana oyuncular dosya sistemleri hakkında bakım:
NUL
, \
, /
, :
, *
, "
, <
, >
, |
. Ayrıca, başında veya sonunda boşluk karakteri ve sonunda nokta yok .:
veya dışında herhangi bir geçerli Unicode/
NUL
veya dışındaki herhangi bir bayt/
böylece herhangi bir bayt hariç NUL
, \
, /
, :
, *
, "
, <
, >
, |
ve dosyaları olamaz / klasörleri aramak .
veya ..
(elbette) ve hiçbir kontrol karakterleri.
/
. Windows ters eğik çizgiye ve bazı dizelere izin vermez (örn. CON
).
:
adlarında s olan dosyalar oluşturabiliyorum .
/
Finder'daki Mac OS X (şimdi MacOS olarak adlandırılır) hakkında daha kesin olmak gerekirse :
, Unix dosya sisteminde yorumlanır.
Bu, Apple Klasik Mac OS'den taşındığında geriye dönük uyumluluk için yapıldı.
Bir kullanımı meşru /
bir ile gösterilir terminalde aynı dosyanın bakarak Finder bir dosya adında :
.
Ve başka bir şekilde de çalışır: /
terminal ile bir dosya adında a kullanamazsınız , ancak a :
tamamdır ve /
Finder'da bir olarak görünecektir .
Bazı uygulamalar daha kısıtlayıcı olabilir ve karışıklığı önlemek veya önceki Klasik Mac OS'den mantık tutmaları veya platformlar arasındaki ad uyumluluğu nedeniyle her iki karakteri de yasaklayabilir.
"İngilizce yerel" dosya adları için bu iyi çalışır. Yüklenen dosya adlarını sterilize etmek için kullanıyorum. Dosya adı diskteki herhangi bir şeye bağlı değildir, dosya indirilirken yol kontrolü yoktur.
$file_name = preg_replace('/([^\x20-~]+)|([\\/:?"<>|]+)/g', '_', $client_specified_file_name);
Temel olarak Windows ve diğer işletim sistemleri için yazdırılamayan ve ayrılmış tüm karakterleri ayırır. Şunları yapabilirsiniz kolayca diğer yerel ayarları ve işlevleri desteklemek için desen uzatın.
Python'da dosya adını temizlemek için kod.
import unicodedata
def clean_name(name, replace_space_with=None):
"""
Remove invalid file name chars from the specified name
:param name: the file name
:param replace_space_with: if not none replace space with this string
:return: a valid name for Win/Mac/Linux
"""
# ref: https://en.wikipedia.org/wiki/Filename
# ref: /programming/4814040/allowed-characters-in-filename
# No control chars, no: /, \, ?, %, *, :, |, ", <, >
# remove control chars
name = ''.join(ch for ch in name if unicodedata.category(ch)[0] != 'C')
cleaned_name = re.sub(r'[/\\?%*:|"<>]', '', name)
if replace_space_with is not None:
return cleaned_name.replace(' ', replace_space_with)
return cleaned_name
:return: a valid name for Win/Mac/Linux
her koşulda doğru değildir.