精华内容
下载资源
问答
  • 下面不合法的文件名是
    2021-06-08 12:39:09

    Java中用到文件操作时,经常要验证文件名是否合法. 用File类的createNewFile()方法的确很管用.但当要批量验证时,效率上就会有问题.正则匹配的开销比创建文件少了很多. 那么一个合法的文件(Win下)应该符合如下规则:

    1.文件名不能为空,空在这里有两个意思:

    文件名(包括扩展名)长度为0或仅由空字符组成(包括\t\b等不可见的转义字符)

    文件名和扩展名不能同时为空.但实际上我们可以用程序创建出类似.project,..txt等形式的文件,但却创建不出类似abc.的文件

    2.文件名中不能包含\/:*?"<>|中的任意字符

    3.文件名(包括扩展名)的长度不得大于255个字符 事实上形如".."(不包含引号,下同)的文件也不能被创建. 不合法的文件还有类似" aa", "aa ", "aa."(会被创建为"aa",也把它算作不合法),"a\ta"(\t为制表符等不可见字符(除空格外))

    于是我们得到了文件名命名规则的更详细规定:

    1.首尾不能有空字符(空格、制表符、换页符等空白字符的其中任意一个),文件名尾不能为.号

    2.文件名和扩展名不能同时为空

    3.文件名中不能包含\/:*?"<>|中的任意字符

    4.文件名(包括扩展名)的长度不得大于255个字符

    5.在1.的条件下,文件名中不能出出现除空格符外的任意空字符.

    更多相关内容
  • 当打印未知的文件名时,使用下面的方法可以避免这样的错误: def bad_filename(filename): return repr(filename)[1:-1] try: print(filename) except UnicodeEncodeError: print(bad_filename(filename)) 如果...
  • 为3.5之前的.NET框架这应该是可行的:...下面是使用System.IO.Path.InvalidPathChars常数;boolIsValidFilename(stringtestName){RegexcontainsABadCharacter=newRegex("["+Regex.Escape(System.IO.Path.InvalidPat...

    为3.5之前的.NET框架这应该是可行的:

    正则表达式匹配应该会给您带来一些好处。下面是使用System.IO.Path.InvalidPathChars常数;bool IsValidFilename(string testName){

    Regex containsABadCharacter = new Regex("["

    + Regex.Escape(System.IO.Path.InvalidPathChars) + "]");

    if (containsABadCharacter.IsMatch(testName)) { return false; };

    // other checks for UNC, drive-path format, etc

    return true;}

    为3.0之后的.NET框架这应该是可行的:

    正则表达式匹配应该会给您带来一些好处。下面是使用System.IO.Path.GetInvalidPathChars()常数;bool IsValidFilename(string testName){

    Regex containsABadCharacter = new Regex("["

    + Regex.Escape(new string(System.IO.Path.GetInvalidPathChars())) + "]");

    if (containsABadCharacter.IsMatch(testName)) { return false; };

    // other checks for UNC, drive-path format, etc

    return true;}

    一旦你知道了这一点,你也应该检查不同的格式,例如c:\my\drive和\\server\share\dir\file.ext

    展开全文
  • java用正则方法验证文件名是否合法

    千次阅读 2021-02-25 19:00:10
    Java中用到文件操作时,经常要验证文件名是否合法....文件名不能为空,空在这里有两个意思:文件名(包括扩展名)长度为0或仅由空字符组成(包括\t\b等不可见的转义字符)文件名和扩展名不能同时为空.但实际上我们可以用程...

    Java中用到文件操作时,经常要验证文件名是否合法. 用File类的createNewFile()方法的确很管用.但当要批量验证时,效率上就会有问题.正则匹配的开销比创建文件少了很多. 那么一个合法的文件(Win下)应该符合如下规则:

    1.文件名不能为空,空在这里有两个意思:

    文件名(包括扩展名)长度为0或仅由空字符组成(包括\t\b等不可见的转义字符)

    文件名和扩展名不能同时为空.但实际上我们可以用程序创建出类似.project,..txt等形式的文件,但却创建不出类似abc.的文件

    2.文件名中不能包含\/:*?"<>|中的任意字符

    3. 文件名(包括扩展名)的长度不得大于255个字符 事实上形如".."(不包含引号,下同)的文件也不能被创建. 不合法的文件还有类似" aa", "aa ", "aa."(会被创建为"aa",也把它算作不合法),"a\ta"(\t为制表符等不可见字符(除空格外))

    于是我们得到了文件名命名规则的更详细规定:

    1.首尾不能有空字符(空格、制表符、换页符等空白字符的其中任意一个),文件名尾不能为.号

    2.文件名和扩展名不能同时为空

    3.文件名中不能包含\/:*?"<>|中的任意字符

    4.文件名(包括扩展名)的长度不得大于255个字符

    5.在1.的条件下,文件名中不能出出现除空格符外的任意空字符.

    展开全文
  • 打印不合法文件名

    2019-07-25 20:28:24
    本文摘自《python3-cookbook》(5.15 打印不合法文件名) 问题 你的程序获取了一个目录中的文件名列表,但是当它试着去打印文件名的时候程序崩溃, 出现了 UnicodeEncodeError 异常和一条奇怪的消息—— surrogates ...

    本文摘自《python3-cookbook》(5.15 打印不合法的文件名)

    问题

    你的程序获取了一个目录中的文件名列表,但是当它试着去打印文件名的时候程序崩溃, 出现了 UnicodeEncodeError 异常和一条奇怪的消息—— surrogates not allowed

    解决方案

    当打印未知的文件名时,使用下面的方法可以避免这样的错误:

    def bad_filename(filename):
        return repr(filename)[1:-1]
    
    try:
        print(filename)
    except UnicodeEncodeError:
        print(bad_filename(filename))
    

    讨论

    这一小节讨论的是在编写必须处理文件系统的程序时一个不太常见但又很棘手的问题。 默认情况下,Python假定所有文件名都已经根据 sys.getfilesystemencoding() 的值编码过了。 但是,有一些文件系统并没有强制要求这样做,因此允许创建文件名没有正确编码的文件。 这种情况不太常见,但是总会有些用户冒险这样做或者是无意之中这样做了( 可能是在一个有缺陷的代码中给 open() 函数传递了一个不合规范的文件名)。

    当执行类似 os.listdir() 这样的函数时,这些不合规范的文件名就会让Python陷入困境。 一方面,它不能仅仅只是丢弃这些不合格的名字。而另一方面,它又不能将这些文件名转换为正确的文本字符串。 Python对这个问题的解决方案是从文件名中获取未解码的字节值比如 \xhh 并将它映射成Unicode字符 \udchh 表示的所谓的”代理编码”。 下面一个例子演示了当一个不合格目录列表中含有一个文件名为bäd.txt(使用Latin-1而不是UTF-8编码)时的样子:

    import os
    files = os.listdir('.')
    print(files)    # ['spam.py', 'b\udce4d.txt', 'foo.txt']
    

    如果你有代码需要操作文件名或者将文件名传递给 open() 这样的函数,一切都能正常工作。 只有当你想要输出文件名时才会碰到些麻烦(比如打印输出到屏幕或日志文件等)。 特别的,当你想打印上面的文件名列表时,你的程序就会崩溃:

    for name in files:
         print(name)
    --------
    spam.py
    Traceback (most recent call last):
        File "<stdin>", line 2, in <module>
    UnicodeEncodeError: 'utf-8' codec can't encode character '\udce4' in
    position 1: surrogates not allowed
    

    程序崩溃的原因就是字符 \udce4 是一个非法的Unicode字符。 它其实是一个被称为代理字符对的双字符组合的后半部分。 由于缺少了前半部分,因此它是个非法的Unicode。 所以,唯一能成功输出的方法就是当遇到不合法文件名时采取相应的补救措施。 比如可以将上述代码修改如下:

    for name in files:
        try:
            print(name)
        except UnicodeEncodeError:
            print(bad_filename(name))
    --------
    spam.py
    b\udce4d.txt
    foo.txt
    

    在 bad_filename() 函数中怎样处置取决于你自己。 另外一个选择就是通过某种方式重新编码,示例如下:

    def bad_filename(filename):
        temp = filename.encode(sys.getfilesystemencoding(), errors='surrogateescape')
        return temp.decode('latin-1')
    

    译者注:
    surrogateescape:
    这种是Python在绝大部分面向OS的API中所使用的错误处理器,
    它能以一种优雅的方式处理由操作系统提供的数据的编码问题。
    在解码出错时会将出错字节存储到一个很少被使用到的Unicode编码范围内。
    在编码时将那些隐藏值又还原回原先解码失败的字节序列。
    它不仅对于OS API非常有用,也能很容易的处理其他情况下的编码错误。
    使用这个版本产生的输出如下:

    for name in files:
         try:
             print(name)
         except UnicodeEncodeError:
             print(bad_filename(name))
    --------
    spam.py
    bäd.txt
    foo.txt
    

    这一小节主题可能会被大部分读者所忽略。但是如果你在编写依赖文件名和文件系统的关键任务程序时, 就必须得考虑到这个。否则你可能会在某个周末被叫到办公室去调试一些令人费解的错误。
    本文链接:时光不写博客-打印不合法的文件名

    展开全文
  • 哪个不是python合法标识符

    千次阅读 2020-12-08 18:23:02
    2. 剩下的字符可以是字母,数字和下划线,即能包含除了下划线以外的符号(空格,运算符...)。3. 大小写敏感。4. Python的保留关键字能作为标识符。5. 建议使用python的内建名字集合当作标识符。Python提供了...
  • 正则表达式判断文件名是否合法

    千次阅读 2015-05-05 18:28:52
    对于文件名是否合法有个正则表达式的判断,下面直接看个例子: public class Test { public static void main(String[] args) { String s="mama可是.as12.3.2.的"; System.out.println(s.matches(&...
  • python打印不合法文件名

    千次阅读 2018-11-19 18:51:36
    python打印不合法文件名 问题 你的程序获取了一个目录中的文件名列表,但是当它试着去打印文件名的时候程序崩溃, 出现了 UnicodeEncodeError 异常和一条奇怪的消息—— surrogates not allowed 。 解决方案 当...
  • 路径下的项目,存在文件命名windows系统报错问题(文件名目录名或卷标语法正确)!如下图: 随后会弹这样的一个窗口,我们需要为他新添加一个property,点击窗口右下角的new。 点击 new->other ,...
  • 用正则验证文件名是否合法

    千次阅读 2012-02-02 13:38:22
    我以前都是用 File 类的 createNewFile() 方法.当然,这个方法的确很管用.但当要批量验证时,总不能一个个创建文件吧. 于是想到了正则, 正则匹配的...文件名不能为空,空在这里有两个意思 文件名(包括扩展名)长度为0
  • 检查文件名是否合法

    2015-08-14 16:40:00
    在网上找了各种方法,都...文件名不能包含下列任意字符: \ / : * ? " < > | ''' <summary> ''' 判断文件名是否合法 ''' </summary> ''' <param name="fileName">文件名(不包...
  • 你想使用原始文件名执行文件的I/O操作,也就是说文件名并没有经过系统默认编码去解码或编码过。 使用原始字节字符串 默认情况下,所有的文件名都会根据 sys.getfilesystemencoding() 返回的文本编码来编码或解码...
  • 目录问题描述项目背景分析运行环境复现问题解决问题扩展阅读 ...由于本人定期会整理相关博文,会对相应...一个zip包,里面有文件名包含中文,解压出来发现变成了“井号”+“U”+十六进制的表达形式,算上是乱码,但...
  • 请多多指教,感激不尽11.C语言程序经过编译以后生成的文件名的后缀为( ).A..c B..obj C..exe D..请多多指教,感激不尽11.C语言程序经过编译以后生成的文件名的后缀为( ).A..c B..obj C..exe D..cpp12.C语言...
  • IIS短文件名泄露漏洞修复

    万次阅读 2019-10-08 19:12:37
    3) 如果文件名前6位带空格,8.3格式的短文件名会补进,和真实文件名不匹配; 4) 如果 文件夹 名前6位字符带点“.”,扫描程序会认为是文件而不是文件夹,最终出现误报; 5)  不支持中文...
  • 深入浅出之IIS短文件名漏洞

    千次阅读 2019-07-09 21:11:09
    3) 如果文件名前6位带空格,8.3格式的短文件名会补进,和真实文件名不匹配;   4) 如果 文件夹 名前6位字符带点“.”,扫描程序会认为是文件而不是文件夹,最终出现误报;       5...
  • 下面是正则表达式常见的使用场景: 检查字符串的合法性 验证用户名 (a-z,0-9,能全是数字,能全是字母) 验证邮箱格式 (xxx@qq.com) 验证电话号码 (11位数字) 验证身份证 (18位 ) 验证QQ号码格式(5-12纯数字...
  • 【单选题】以下选项中属于Python语言中合法的二进制整数是【单选题】以下说法错误的是:【单选题】下面属于B2B电子商务模式的是( )。【单选题】下面哪种金属毛坯成形的加工方法无需进行热处理和机械加工?【判断题】酶...
  • 可移植文件名字符集

    2021-05-10 21:38:58
    下面是三段原话在大多数Linux文件系统上,文件名最长可达255个字符。文件名可以包含除“/”和空字符(\0)外的所有字符。但是,只建议使用字母、数字、点(“.”)、下划线(“_”)以及连字符(“−”)。SUSv3将这65...
  • 关键点: 1.封装form表单提交,做成类似post请求传递多参数下载文件的效果。 2.请求参数乱码的简单纪要 3.下载功能,中文文件名的乱码解决 4.下载CSV格式的文件的乱码问题分析
  • 如果一个文件名不下面所示的开场,那它将是相对于当前路径的: 以”\\” 开始的UNC 名 一个磁盘代号加反斜线,比如“C:” 当个反斜线,比如:“\directory” 或 “file.txt”被认为是绝对路径   ...
  • Java高级-带答案

    千次阅读 2021-03-09 08:11:08
    第1题:以下关于Java文件名的叙述,正确的有?(AB)[多选题]选项小计比例A.Java源文件的扩展名应为.java(答案)80%B.Java源文件的文件名应与文件中的类名一致(答案)70%C. Java字节码文件的扩展名应为.java10%D. ...
  • 在FAT32的directory entry里,所预留的文件名的长度是8.3格式的,也就是说,文件名是8个字符,后缀名是3个字符,长于这个的就被认为不合法太确定这个规定是从FAT12开始的,还是从FAT16开始的,总之在FAT32里依旧...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 52,553
精华内容 21,021
关键字:

下面不合法的文件名是