Exemple #1
0
        internal static string BytesToText(byte[] buff, Encoding encoding)
        {
            if (buff.Length == 0)
            {
                return("");
            }
            TextEncodingDetect detect = new TextEncodingDetect();

            encoding = detect.GetEncoding(buff, encoding);
            if (detect.hasBom)
            {
                if (encoding == Encoding.UTF8)
                {
                    return(encoding.GetString(buff, 3, buff.Length - 3));
                }
                if (encoding == Encoding.Unicode || encoding == Encoding.BigEndianUnicode)
                {
                    return(encoding.GetString(buff, 2, buff.Length - 2));
                }
                if (encoding == Encoding.UTF32)
                {
                    return(encoding.GetString(buff, 4, buff.Length - 4));
                }
            }
            return(encoding.GetString(buff));
        }
Exemple #2
0
 internal static bool Save(string fileName, string text, bool isAppend, bool writeLogOnError, Encoding encode)
 {
     try
     {
         //System.Text.Encoding.UTF8
         string folder = Path.GetDirectoryName(fileName);
         if (!Directory.Exists(folder))
         {
             Directory.CreateDirectory(folder);
         }
         string key = "IOHelper_Save_" + fileName.GetHashCode();
         if (cache.Contains(key))
         {
             encode = cache.Get <Encoding>(key);
         }
         else if (File.Exists(fileName))
         {
             TextEncodingDetect detect       = new TextEncodingDetect();
             Encoding           detectEncode = detect.GetEncoding(File.ReadAllBytes(fileName), encode);
             if (detectEncode != Encoding.ASCII)
             {
                 encode = detectEncode;
             }
             cache.Set(key, encode, 60);
         }
         lock (GetLockObj(fileName.Length))
         {
             using (StreamWriter writer = new StreamWriter(fileName, isAppend, encode))
             {
                 writer.Write(text);
             }
         }
         return(true);
     }
     catch (Exception err)
     {
         if (writeLogOnError)
         {
             Log.WriteLogToTxt(err);
         }
         else
         {
             Error.Throw("IOHelper.Save() : " + err.Message);
         }
     }
     return(false);
 }
Exemple #3
0
 internal static bool Save(string fileName, string text, bool isAppend, bool writeLogOnError, Encoding encode, int tryCount)
 {
     try
     {
         //System.Text.Encoding.UTF8
         string folder = Path.GetDirectoryName(fileName);
         if (!Directory.Exists(folder))
         {
             Directory.CreateDirectory(folder);
         }
         string key = "IOHelper_Save_" + fileName.GetHashCode();
         if (cache.Contains(key))
         {
             encode = cache.Get <Encoding>(key);
         }
         else if (File.Exists(fileName))
         {
             TextEncodingDetect detect       = new TextEncodingDetect();
             Encoding           detectEncode = detect.GetEncoding(File.ReadAllBytes(fileName), encode);
             if (detectEncode != Encoding.ASCII)
             {
                 encode = detectEncode;
             }
             cache.Set(key, encode, 60);
         }
         lock (GetLockObj(fileName.Length))
         {
             try
             {
                 using (StreamWriter writer = new StreamWriter(fileName, isAppend, encode))
                 {
                     if (!isAppend && fileName.EndsWith(".txt"))
                     {
                         //写入bom头
                     }
                     writer.Write(text);
                 }
             }
             catch (Exception err)
             {
                 if (tryCount > 0)
                 {
                     tryCount--;
                     Thread.Sleep(500 + (3 - tryCount) * 500);
                     Save(fileName, text, isAppend, writeLogOnError, encode, tryCount);
                 }
                 else
                 {
                     Error.Throw(err.Message);
                 }
             }
         }
         return(true);
     }
     catch (Exception err)
     {
         if (tryCount == 3) // 避免死循环。
         {
             if (writeLogOnError)
             {
                 Log.Write(err, LogType.Error);
             }
             else
             {
                 Error.Throw("IOHelper.Save() : " + err.Message);
             }
         }
     }
     return(false);
 }