MSBuild Concat任务仅处理ASCII文件
我使用MSBuild副本,然后使用Concat连接多个SQL文件。一些SQL文件采用其他格式(在记事本中打开),但在Concat访问这些文件后,生成的文件中到处都是奇怪的字符MSBuild Concat任务仅处理ASCII文件,msbuild,Msbuild,我使用MSBuild副本,然后使用Concat连接多个SQL文件。一些SQL文件采用其他格式(在记事本中打开),但在Concat访问这些文件后,生成的文件中到处都是奇怪的字符 有人能帮我吗,以前有人经历过吗?如何将所有SQL文件转换为ascii,或使Concat任务正常工作?我通过编写实用程序C#类解决了这个问题。它不是为处理异常而设计的,它们由调用类处理或在控制台中未处理 它将文件转换为ASCII,删除所有无效字符并重写文件 我花了一段时间想知道为什么会出现访问被拒绝的问题,请确保在转换之前签
有人能帮我吗,以前有人经历过吗?如何将所有SQL文件转换为ascii,或使Concat任务正常工作?我通过编写实用程序C#类解决了这个问题。它不是为处理异常而设计的,它们由调用类处理或在控制台中未处理 它将文件转换为ASCII,删除所有无效字符并重写文件 我花了一段时间想知道为什么会出现访问被拒绝的问题,请确保在转换之前签出了所有要转换的文件 如果您感兴趣,请点击这里:
using System;
using System.IO;
using System.Text;
/// <summary>
/// Manages encoding of text files.
/// </summary>
public class TextFileEncoding
{
/// <summary>
/// Main command-line entry.
/// </summary>
/// <param name="args"></param>
public static void Main(string[] args)
{
if (args.Length > 0)
{
string argParam = args[0].ToString().Trim().ToLower();
switch (argParam)
{
// Return encoding for a file.
case "get":
Encoding enc = GetEncoding(args[1].ToString());
Console.WriteLine(enc.EncodingName);
break;
// convert encoding for a path with a given pattern to ASCII.
case "toascii":
int count = ConvertToAscii(args[1].ToString(), args.Length == 3 ? args[2] : "*.*");
Console.WriteLine("Successfully converted " + count + " files.");
break;
default:
Console.WriteLine("Invalid parameter. Expected get or toascii");
break;
}
}
else
{
Console.WriteLine("Missing filename parameter.\nFormat: TextFileEncoding.exe [get|toascii] <TextFile> <Path> <Pattern>");
}
}
/// <summary>
/// Returns the encoding of the filename at the specified path.
/// </summary>
/// <param name="filename"></param>
/// <returns></returns>
public static Encoding GetEncoding(string filename)
{
StreamReader fileStream = new StreamReader(filename, true);
return GetEncoding(fileStream);
}
/// <summary>
/// Returns the encoding of the file stream.
/// </summary>
/// <param name="fileStream"></param>
/// <returns></returns>
public static Encoding GetEncoding(StreamReader fileStream)
{
return fileStream.CurrentEncoding;
}
/// <summary>
/// Converts all files to ascii encoding.
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
public static int ConvertToAscii(string path, string pattern)
{
DirectoryInfo pathInfo = new DirectoryInfo(path);
int count = 0;
// Get files in directory, recursively.
FileInfo[] files = pathInfo.GetFiles(pattern, SearchOption.AllDirectories);
foreach (FileInfo file in files)
{
// Encode to ASCII.
if (EncodeAscii(file))
{
count++;
}
}
return count;
}
/// <summary>
/// Converts file to ascii.
/// </summary>
/// <param name="file"></param>
/// <returns></returns>
private static bool EncodeAscii(FileInfo file)
{
ASCIIEncoding encoder = new ASCIIEncoding();
// Get content of file as string.
string content = File.ReadAllText(file.FullName);
// Convert to an ASCII byte array.
byte[] asciiString = encoder.GetBytes(content);
// Convert to string, so all unknown characters get removed.
string cleanString = encoder.GetString(asciiString);
// Convert back to byte array for writing to file.
byte[] cleanBytes = encoder.GetBytes(cleanString);
// Delete and rewrite file as ASCII.
file.Delete();
File.WriteAllBytes(file.FullName, cleanBytes);
return true;
}
}
使用系统;
使用System.IO;
使用系统文本;
///
///管理文本文件的编码。
///
公共类TextFileEncoding
{
///
///主命令行条目。
///
///
公共静态void Main(字符串[]args)
{
如果(args.Length>0)
{
字符串argParam=args[0].ToString().Trim().ToLower();
开关(argParam)
{
//返回文件的编码。
案例“get”:
Encoding enc=GetEncoding(args[1].ToString());
Console.WriteLine(enc.EncodingName);
打破
//将具有给定模式的路径的编码转换为ASCII。
“toascii”案:
int count=ConvertToAscii(args[1].ToString(),args.Length==3?args[2]:“*”);
WriteLine(“已成功转换”+计数+“文件”);
打破
违约:
Console.WriteLine(“无效参数。应为get或toascii”);
打破
}
}
其他的
{
WriteLine(“缺少文件名参数。\n格式:TextFileEncoding.exe[get | toascii]”;
}
}
///
///返回指定路径处文件名的编码。
///
///
///
公共静态编码GetEncoding(字符串文件名)
{
StreamReader fileStream=新的StreamReader(文件名,true);
返回GetEncoding(fileStream);
}
///
///返回文件流的编码。
///
///
///
公共静态编码GetEncoding(StreamReader文件流)
{
返回fileStream.CurrentEncoding;
}
///
///将所有文件转换为ascii编码。
///
///
///
公共静态int ConvertToAscii(字符串路径、字符串模式)
{
DirectoryInfo pathInfo=新的DirectoryInfo(路径);
整数计数=0;
//递归地获取目录中的文件。
FileInfo[]files=pathInfo.GetFiles(模式,SearchOption.AllDirectories);
foreach(文件中的文件信息文件)
{
//编码为ASCII码。
if(编码ASCII(文件))
{
计数++;
}
}
返回计数;
}
///
///将文件转换为ascii。
///
///
///
专用静态布尔编码ASCII(文件信息文件)
{
ascienceoding编码器=新的ascienceoding();
//以字符串形式获取文件的内容。
字符串内容=File.ReadAllText(File.FullName);
//转换为ASCII字节数组。
字节[]ascistring=encoder.GetBytes(内容);
//转换为字符串,以便删除所有未知字符。
string cleanString=encoder.GetString(ascistring);
//转换回字节数组以写入文件。
字节[]cleanBytes=编码器.GetBytes(cleanString);
//删除并将文件重写为ASCII。
Delete();
File.writealBytes(File.FullName,cleanBytes);
返回true;
}
}