我是编码主题的新手,想要更详细地理解它。我在MSDN上找到了创建文件夹和文件的示例。使用WriteByte方法完成文件的创建。 http://msdn.microsoft.com/en-us/library/as2f1fez.aspx
为方便起见,我已将代码直接放在下面:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CreateFolderFile
{
class Program
{
static void Main(string[] args)
{
// Specify a "currently active folder"
string activeDir = @"c:\testdir2";
//Create a new subfolder under the current active folder
string newPath = System.IO.Path.Combine(activeDir, "mySubDir");
// Create the subfolder
System.IO.Directory.CreateDirectory(newPath);
// Create a new file name. This example generates
// a random string.
string newFileName = System.IO.Path.GetRandomFileName();
// Combine the new file name with the path
newPath = System.IO.Path.Combine(newPath, newFileName);
// Create the file and write to it.
// DANGER: System.IO.File.Create will overwrite the file
// if it already exists. This can occur even with
// random file names.
if (!System.IO.File.Exists(newPath))
{
using (System.IO.FileStream fs = System.IO.File.Create(newPath))
{
for (byte i = 0; i < 100; i++)
{
fs.WriteByte(i);
}
}
}
// Read data back from the file to prove
// that the previous code worked.
try
{
byte[] readBuffer = System.IO.File.ReadAllBytes(newPath);
foreach (byte b in readBuffer)
{
Console.WriteLine(b);
}
}
catch (System.IO.IOException e)
{
Console.WriteLine(e.Message);
}
// Keep the console window open in debug mode.
System.Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
}
}
}
我还在Joel Spolsky上发现了一篇关于这个主题的有趣文章:
绝对最低限度每个软件开发人员绝对必须知道Unicode和字符集(没有借口!) http://www.joelonsoftware.com/printerFriendly/articles/Unicode.html
我的问题:WriteByte方法使用什么编码?从我所做的阅读中,无论你使用什么,是否真的可以准确地确定文件的编码? (例如:您发送的csv文件并使用Notepad ++确定编码)。
思想?
答案 0 :(得分:1)
Stream.WriteByte
将字节作为输入(方法的参数)和输出(目标流)处理,它们本质上是二进制数据 - 所以编码的概念(a文本和二进制信息之间的映射)并不适用。
现在,如果您要读取使用WriteByte
调用创建的文件,就好像它是一个文本文件,需要您解释< / em>它以特定的编码方式。这是另一回事 - 文件的内容仍然只是字节。
正如Guffa的回答所指出的,文件没有(通常,无论如何 1 )都有任何编码概念。它只是一桶字节。如果您的文件只是纯文本,您必须要么在阅读时知道编码是什么,要么用启发式推断它。
1 文件系统当然可以保留有关编码的元数据 - 但是由创建程序来设置它。
答案 1 :(得分:1)
WriteByte
方法根本不使用任何编码。字节值完全按照指定写入,没有转换。
编码仅用于文本。通常,整个文本文件使用相同的编码,但是可以使用包含二进制数据和编码文本的文件。
文件本身没有任何关于任何编码的信息。该文件只包含字节,编码可用于将字节解释为文本。
某些文件格式在文件开头有一个指示符来确定编码。通常,您将使用中性编码(例如ASCII)读取文件的第一部分,以获取有关要使用的编码的信息。 (这是一个引导问题。)
例如,XML文件的第一行可能包含版本标记,该标记可能包含指定编码的属性。另一个例子是Unicode文本文件中的第一个字符,它可以是BOM(字节顺序标记),可用于确定使用哪种类型的unicode编码。