• 在C#中使用非ASCII字符和FileInfo的文件路径

  • 本文关于 c#,unicode,路径path,fileinfo
  • CodeGo.net > 在C#中使用非ASCII字符和FileInfo的文件路径
  •  

    在C#中使用非ASCII字符和FileInfo的文件路径



    c# unicode 路径path fileinfo
    我得到一个字符串,它或多或少看起来像这样:
    "C:\\bláh\\bleh"
    
    我做一个FileInfo有了它,但是当我检查它的存在则返回false:
    var file = new FileInfo(path);
    file.Exists;
    
    如果我手动的路径
    "C:\\blah\\bleh"
    
    在调试和确保嗒嗒存在。里面坐了一个啧,然后file.Exists开始返回true。所以我相信这个问题是使用非ASCII字符。 实际的字符串是由我的程序构建.a个部分从该应用程序,这是一个包含“A”,在一个方式的另一部分,由这两个部分的部分的应用程序域被放在一起通过的Path.Combine。我生成的字符串两种方式的有效性:从我的程序产生错误 CodeGo.net,其中包含路径复制它,进入资源管理器打开文件就好了。看着这个字符串在调试器,它看起来正确转义,在\\写为\\。在“A”是由调试器文采飞扬印刷。 我应该如何处理字符串,这样即使它有非ASCII字符,它原来是一个有效的路径?
    本文地址 :CodeGo.net/1482687/
    -------------------------------------------------------------------------------------------------------------------------
    1.这里是将要处理音调符号中的文件的。取决于你的系统是如何存储
    public bool FileExists(string sPath)
    {
     //Checking for composed and decomposed is to handle diacritics in filenames. 
     var pathComposed = sPath.Normalize(NormalizationForm.FormC);
     if (File.Exists(pathComposed)) 
      return true;
     //We really need to check both possibilities.
     var pathDecomposed = sPath.Normalize(NormalizationForm.FormD);
     if (File.Exists(pathDecomposed))  
      return true;
     return false;
    }
    

    2. 使用System.IO.Path。方法得到的无效字符数组
     if (filename.IndexOfAny(System.IO.Path.GetInvalidFileNameChars())==-1) // valid path
     {
       ....
     }
    

    3. 试试这个
     string sourceFile = @"C:\bláh\bleh";
     if (File.Exists(sourceFile))
     {
       Console.WriteLine("file exist.");
     }
     else
     {
      Console.WriteLine("file does not exist.");
     }
    
    注:不应为路径验证,只是检查,如果在路径中指定的文件是否存在。传递一个无效的路径存在返回false。 对于路径验证您Directory.Exists。
    4. 我刚才手册册创建包含啧文件等等文件夹,并与到位,这段代码打印True如预期:
    using System;
    using System.IO;
    namespace ConsoleApplication72
    {
     class Program
     {
      static void Main(string[] args)
      {
       string filename = "c:\\bláh\\bleh";
       FileInfo fi = new FileInfo(filename);
       Console.WriteLine(fi.Exists);
       Console.ReadLine();
      }
     }
    }
    
    我建议你检查串的源-特别是,虽然你的3K代表语音反对这个是问题,那表示反斜杠作为\\是C#语法的神器 CodeGo.net,你要确保你的字符串实际上只包含单\秒。
    5. 谈到@adatapost的答复,无效的文件中的字符的列表(从收集System.IO.Path.GetInvalidFileNameChars()它看起来像你真的问的问题是:“我如何从一个字符串(或在这种情况下,文件路径)中移除音调符号?”。 或者,也许你并没有提出这个问题,你真的想找到一个文件
    c:\blòh\bleh
    
    (或类似)。在这种情况下,你再需要尝试用打开文件,而不是c:\bloh\bleh
    6. 像路径中的“啧”是一个目录,而不是一个文件。如果要检查的文件夹目录。
    7. 问题是:程序没有足够的权限来访问该文件。修复权限解决了这一问题。看来,当我没有我的,我设法重现权限问题,可能通过手动创建的文件夹没有非ASCII字符并复制另一个。 哦......这样的尴尬。
    本文标题 :在C#中使用非ASCII字符和FileInfo的文件路径
    本文地址 :CodeGo.net/1482687/
    1. 计算同一事件发生两次的时间间隔
    2. C#2Dcollision检测问题
    3. FCKEditor如何过滤脚本?
    4. 导出DataGrid中使用PDF格式的C#
    5. 数组怎样移位操作
    6. 突然变的手表停止工作(VS)
    7. Winform如何读写取Web.config
    8. 从combinations框列表框更新
    9. 析下结果 using System;us
    10. 访问sharepoint的“用户信息列表”通过一个web服务

     
    

    Copyright © 2017 CodeGo.net
    http://codego.net/xinwen/ 足球比分网 足球比分 医药招商网 邵阳县新闻