Signed-off-by: Syrone Wong <wong.syrone@gmail.com>tags/3.4.2.1
@@ -1,6 +1,7 @@ | |||||
using System; | using System; | ||||
using System.IO; | using System.IO; | ||||
using System.IO.Compression; | using System.IO.Compression; | ||||
using System.Text; | |||||
namespace Shadowsocks.Controller | namespace Shadowsocks.Controller | ||||
{ | { | ||||
@@ -39,5 +40,19 @@ namespace Shadowsocks.Controller | |||||
} | } | ||||
} | } | ||||
} | } | ||||
public static string NonExclusiveReadAllText(string path) | |||||
{ | |||||
return NonExclusiveReadAllText(path, Encoding.Default); | |||||
} | |||||
public static string NonExclusiveReadAllText(string path, Encoding encoding) | |||||
{ | |||||
using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) | |||||
using (var sr = new StreamReader(fs, encoding)) | |||||
{ | |||||
return sr.ReadToEnd(); | |||||
} | |||||
} | |||||
} | } | ||||
} | } |
@@ -39,7 +39,7 @@ namespace Shadowsocks.Controller | |||||
List<string> lines = ParseResult(e.Result); | List<string> lines = ParseResult(e.Result); | ||||
if (File.Exists(PACServer.USER_RULE_FILE)) | if (File.Exists(PACServer.USER_RULE_FILE)) | ||||
{ | { | ||||
string local = File.ReadAllText(PACServer.USER_RULE_FILE, Encoding.UTF8); | |||||
string local = FileManager.NonExclusiveReadAllText(PACServer.USER_RULE_FILE, Encoding.UTF8); | |||||
using (var sr = new StringReader(local)) | using (var sr = new StringReader(local)) | ||||
{ | { | ||||
foreach (var rule in sr.NonWhiteSpaceLines()) | foreach (var rule in sr.NonWhiteSpaceLines()) | ||||
@@ -53,7 +53,7 @@ namespace Shadowsocks.Controller | |||||
string abpContent; | string abpContent; | ||||
if (File.Exists(PACServer.USER_ABP_FILE)) | if (File.Exists(PACServer.USER_ABP_FILE)) | ||||
{ | { | ||||
abpContent = File.ReadAllText(PACServer.USER_ABP_FILE, Encoding.UTF8); | |||||
abpContent = FileManager.NonExclusiveReadAllText(PACServer.USER_ABP_FILE, Encoding.UTF8); | |||||
} | } | ||||
else | else | ||||
{ | { | ||||
@@ -62,7 +62,7 @@ namespace Shadowsocks.Controller | |||||
abpContent = abpContent.Replace("__RULES__", JsonConvert.SerializeObject(lines, Formatting.Indented)); | abpContent = abpContent.Replace("__RULES__", JsonConvert.SerializeObject(lines, Formatting.Indented)); | ||||
if (File.Exists(PACServer.PAC_FILE)) | if (File.Exists(PACServer.PAC_FILE)) | ||||
{ | { | ||||
string original = File.ReadAllText(PACServer.PAC_FILE, Encoding.UTF8); | |||||
string original = FileManager.NonExclusiveReadAllText(PACServer.PAC_FILE, Encoding.UTF8); | |||||
if (original == abpContent) | if (original == abpContent) | ||||
{ | { | ||||
UpdateCompleted(this, new ResultEventArgs(false)); | UpdateCompleted(this, new ResultEventArgs(false)); | ||||
@@ -557,10 +557,10 @@ namespace Shadowsocks.Controller | |||||
UpdatePACFromGFWList(); | UpdatePACFromGFWList(); | ||||
return; | return; | ||||
} | } | ||||
List<string> lines = GFWListUpdater.ParseResult(File.ReadAllText(Utils.GetTempPath("gfwlist.txt"))); | |||||
List<string> lines = GFWListUpdater.ParseResult(FileManager.NonExclusiveReadAllText(Utils.GetTempPath("gfwlist.txt"))); | |||||
if (File.Exists(PACServer.USER_RULE_FILE)) | if (File.Exists(PACServer.USER_RULE_FILE)) | ||||
{ | { | ||||
string local = File.ReadAllText(PACServer.USER_RULE_FILE, Encoding.UTF8); | |||||
string local = FileManager.NonExclusiveReadAllText(PACServer.USER_RULE_FILE, Encoding.UTF8); | |||||
using (var sr = new StringReader(local)) | using (var sr = new StringReader(local)) | ||||
{ | { | ||||
foreach (var rule in sr.NonWhiteSpaceLines()) | foreach (var rule in sr.NonWhiteSpaceLines()) | ||||
@@ -574,7 +574,7 @@ namespace Shadowsocks.Controller | |||||
string abpContent; | string abpContent; | ||||
if (File.Exists(PACServer.USER_ABP_FILE)) | if (File.Exists(PACServer.USER_ABP_FILE)) | ||||
{ | { | ||||
abpContent = File.ReadAllText(PACServer.USER_ABP_FILE, Encoding.UTF8); | |||||
abpContent = FileManager.NonExclusiveReadAllText(PACServer.USER_ABP_FILE, Encoding.UTF8); | |||||
} | } | ||||
else | else | ||||
{ | { | ||||
@@ -583,7 +583,7 @@ namespace Shadowsocks.Controller | |||||
abpContent = abpContent.Replace("__RULES__", JsonConvert.SerializeObject(lines, Formatting.Indented)); | abpContent = abpContent.Replace("__RULES__", JsonConvert.SerializeObject(lines, Formatting.Indented)); | ||||
if (File.Exists(PACServer.PAC_FILE)) | if (File.Exists(PACServer.PAC_FILE)) | ||||
{ | { | ||||
string original = File.ReadAllText(PACServer.PAC_FILE, Encoding.UTF8); | |||||
string original = FileManager.NonExclusiveReadAllText(PACServer.PAC_FILE, Encoding.UTF8); | |||||
if (original == abpContent) | if (original == abpContent) | ||||
{ | { | ||||
return; | return; | ||||