2016-02-05 56 views
0

我通过将文件中的行结尾从DOS转换为UNIX格式的C#文件中删除了Carriage return。这基本上意味着我正在删除文件格式的回车符。在Windows中创建一个tar归档文件重新引入了CR字符

的代码我使用:

private void Dos2Unix(string fileName) 
{ 
    const byte CR = 0x0D; 
    const byte LF = 0x0A; 
    byte[] data = File.ReadAllBytes(fileName); 
    using (FileStream fileStream = File.OpenWrite(fileName)) 
    { 
     BinaryWriter bw = new BinaryWriter(fileStream); 
     int position = 0; 
     int index = 0; 
     do 
     { 
      index = Array.IndexOf<byte>(data, CR, position); 
      if ((index >= 0) && (data[index + 1] == LF)) 
      { 
       // Write before the CR 
       bw.Write(data, position, index - position); 
       // from LF 
       position = index + 1; 
      } 
     } 
     while (index > 0); 
     bw.Write(data, position, data.Length - position); 
     fileStream.SetLength(fileStream.Position); 
    } 
} 

但经过我转换,从DOS到Unix的格式,我需要创建所有转换后的文件的一个tar归档。当我使用此代码创建文件的tar归档文件时:

batchFileContents[1] = String.Format("\"C:\\Program Files (x86)\\7-Zip\\7z.exe\" a -ttar -so archive.tar \"{0}\"* | " + 
         "\"C:\\Program Files (x86)\\7-Zip\\7z.exe\" a -si \"{1}\"", inputDirectory, nameOfFile); 

File.WriteAllLines("execute.bat", batchFileContents); 

回车符将在所有文件中重新出现。

上面的dos2unix函数能够去掉回车符。但问题是,当tar创建存档时,回车再次出现。如何避免这一点?

我该如何解决这个问题?需要一些指导。

+0

我建议安装cygwin并使用** dos2unix **删除回车符,** tar **创建归档文件。 – Rumbleweed

+0

dos2unix函数能够删除回车符。但问题是,当tar创建存档时,回车再次出现。如何避免这一点。 – lakesh

+0

Tar不会修改文件。 7z是你的罪魁祸首。 – Rumbleweed

回答

0

为什么使用7zip创建tar档案?最终,你无法控制第三方程序的行为。

你可以试试https://code.google.com/archive/p/tar-cs/这是一个库,直接从C#创建tar档案,它是开源的。如果最后添加回车符,您可以尝试其他库或查看自己的源代码以查看原因。

+0

但我的问题是当我在窗口中执行tar时,它仍会添加回车符。如何避免这种情况? – lakesh

+0

回车不只是自动添加,有的东西必须放在那里后,你已经删除它。您使用'7z.exe'来创建tar档案,我所说的是使用别的东西来创建tar档案,在这种情况下可能不会像7zip那样添加回车符。 – caesay

0

首先,避免重复的(方形)轮:

现在,the tar format根据定义,只是使用最小的元数据粘在一起的文件。没有涉及数据转换。所以,你的问题在别处 - 也许你正在归档错误的文件或检查存档数据的不忠实表示。

相关问题