2012-05-23 2 views
0

Я создал двоичный файл следующим образом (чтобы убедиться, что все возможные значения байтов в бинарном файле):Почему я могу использовать FileSystemObjects для чтения и записи двоичных файлов на стороне клиента, но не для чтения и отправки их на сервер?

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; 
    } 
} 

в JavaScript в IE, копирования файла (чтение его, а затем писать его обратно) отлично работает при использовании 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(); 

, что приводит к испытанию с букетом 0 в его массиве и несколькими другими ненулевыми элементами, но в основном всего 0.

Может кто-нибудь объяснить, почему это работает для одного, а не для другого? Что мне нужно сделать, чтобы получить значения в javascript?

Кстати, here is a related read on reading files off the client machine:

+0

Как читать и конвертировать в шестнадцатеричный? – Cobaia

ответ

0

Во-первых, вы знаете, если длина конечного массива имеет ту же длину, что и файл?

Попробуйте читать и «PUSH» в отдельно oprations, как:

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

Кроме того, вы можете попробовать это с данными текста, чтобы увидеть, если это бинарная природа файла/данных вызывает проблему.