0

次の方法でバイナリ ファイルを作成しました (可能なすべてのバイト値がバイナリ ファイルに含まれるようにするため)。

using (var fs = File.Create(fileName))
{
    for (byte b = 0; b < Byte.MaxValue; b++)
    {
        fs.WriteByte(b);
    }
}

そして私はこのようにそれを読みました(それが機能することをテストするため):

using (var fs = File.Open(fileName, FileMode.Open))
{
    long oldPos = -1;
    long pos = 0;
    while (oldPos != pos)
    {
        oldPos = pos;
        Console.WriteLine(Convert.ToString(fs.ReadByte(), 2).PadLeft(8, '0'));
        pos = fs.Position;
    } 
}

IE の JavaScript では、次のファイルを使用すると、ファイルのコピー (読み取り、書き込み) が正常に機能しますFileSystemObject

var fso = new ActiveXObject("Scripting.FileSystemObject");
var from = fso.OpenTextFile(fileToRead, 1, 0); // read, ASCII (-1 for unicode)
var to = fso.CreateTextFile(fileToWriteTo, true, false); 
while (!from.AtEndOfStream) {
    to.Write(from.Read(1));
}
from.Close();
to.Close();

出力されたバイナリファイルを読み込むと、00000000,00000001,00000010... などとなります。

しかし、それをjavascriptに読み込もうとすると、読み取りに失敗するようです:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var from = fso.OpenTextFile(fileToRead, 1, 0); 
var test = [];
while (!from.AtEndOfStream) {
    test.push(0xff & from.Read(1));  // make it a byte.
}
from.Close();

その結果、test の配列には多数の 0 が含まれ、他のゼロ以外の項目がいくつかありますが、ほとんどは 0 です。

誰かがなぜそれが一方では機能し、他方では機能しないのか説明できますか? 値をJavaScriptに取得するにはどうすればよいですか?

ところで、これはクライアント マシンからのファイルの読み取りに関連する読み取りです

4

1 に答える 1

0

まず、最終的な配列の長さがファイルと同じ長さかどうか知っていますか?

次のように、読み取りと「プッシュ」を別々の操作で試してください。

...  
Test2 = from.Read(1));  
// Possibly display value of Test2 as string  
test.push(Test2);  
...  

また、テキスト データでこれを試して、問題の原因となっているファイル/データのバイナリの性質であるかどうかを確認することもできます。

于 2012-06-27T15:52:08.737 に答える