2015-09-09 2 views
0

Я пытаюсь повторить эту функцию PHP с VB.net:ReadAllText это возвращает только первую строку

function getGiantsModMD5Hash($modFile) 
{ 
$info = pathinfo($modFile); 
// Add mod zip data 
$fileContent = file_get_contents($modFile); 
// Add basefile name string without extension 
$fileContent .= basename($modFile, '.' . $info['extension']); 
return md5($fileContent); 
} 

Из моего понимания функции FileSystem.ReadAllText наиболее эквивалентна функции file_get_contents в PHP. Но когда я использую его, он не работает, кажется, что он возвращает только первую строку. Я попытался добавить Encoding.Default, Encoding.UTF8 и т. Д., Ни один из них не работает.

Вот мой код для чтения файла (в данном случае это файл .zip)

Dim createHash As String 
createHash = My.Computer.FileSystem.ReadAllText(modsPath & modName & ".zip") & modName 
Form1.TextBox1.Text = createHash    ' Show result of ReadAllText to my eye 

Любая идея, как я могу получить эту работу?

UPDATE:

Это "формат" данных мне нужно:

PKHr�F���Q��U brand.dds훻  
�1�W�4���o`ao�al��ZX��C|@��-A��)���b��:d�39's�hVQ9�G&�ɹ��3��]�q��j�:{����  
�S�������a�e���ߵ[7����]� 

... И так далее

Это то, что он выглядит, когда я печать результат функции PHP file_get_contents. (Файл является .zip)

Что мне нужно сделать, это взять эту информацию и добавить имя файла без расширения файла к нему и рассчитать хеш-файл MD5, поэтому я могу сравнить это значение с уже существующим MD5 хэш.

Я уже много часов искал поиски решения. Кажется, так просто с PHP, но почти невозможно воспроизвести с помощью VB.NET? :(

+0

Посмотрите http://stackoverflow.com/questions/18173752/c-sharp-file-readalltext-only-reads-first-char – Linesofcode

+3

Если это zip-файл, ReadAllText не будет работать правильно. Этот метод предназначен для чтения текстовых файлов, а не двоичных файлов. –

+0

Имеет ли в вашем TextBox свойство Multiline значение True? – Blackwood

ответ

1

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

Хэширование файла прост, но, к сожалению, поскольку вы добавляете имя файла, которое делает вещи немного сложнее, но это не так уж плохо. Вот код C#, который, надеюсь, вы можете легко переносить на VB (вы будете использовать точно такие же методы и типы):

byte[] HashFileWithName(string filename) 
{ 
    using (var md5 = Md5.Create()) 
    { 
     using (var stream = File.OpenRead(filename)) 
     { 
      byte[] buffer = new byte[1024]; 
      int bytesRead; 
      while ((bytesRead = stream.Read(buffer, 0, 1024)) != 0) 
      { 
       md5.TransformBlock(buffer, 0, bytesRead, null, 0); 
      } 
      string nameToHash = Path.GetFileNameWithoutExtension(filename); 
      md5.TransformFinalBlock(Encoding.UTF8.GetBytes(nameToHash)); 
      return md5.Hash; 
     } 
    } 
} 

Вы можете настроить кодировку файла, хотя это маловероятно, не имеет значения, если т Его имя файла содержит символы, отличные от ASCII.

+0

Нет, похоже, что он не работает с VB. net я попытался использовать функцию File.OpenRead, но, похоже, просто повесил приложение. Тем не менее, консоль, похоже, может кэшировать данные, но я не могу получить ее в формате строки или текстовом поле. –

+0

@PatrikBoXonNicklasson: 'File.OpenRead' должен отлично работать с VB - трудно понять, что происходит не так. Что касается преобразования 'byte []' в строку - какой формат вы используете? Hex? Base64? –

+0

Это «формат» данных, которые мне нужны: PKHr F Q U \t бренд.dds 훻 1 W 4 o'ao al ZX C | @ -A ) b : d 39's hVQ9 G & ɹ 3 ] q j : { S a e ߵ [7 ] ... и так далее Вот как это выглядит, когда я печатаю результат функции PHP file_get_contents. (Файл является .zip) Что мне нужно сделать, так это взять эту информацию и добавить имя файла без расширения файла к нему и рассчитать хеш-файл MD5, поэтому я могу сравнить это значение с уже существующим хешем MD5. –

Смежные вопросы