2010-04-27 3 views
0

Je diffuse des données WAV à partir d'une application Flash. Si j'obtiens les données et faites ce qui suit:FileUtils.mv ajout de sauts de ligne dans Windows

f = File.open('c:/test.wav', 'wb') 
f << wav_data.pack('c'*wav_data.length) 
f.close 

Le fichier wav fonctionne parfaitement. Si je fais ceci:

f = Tempfile.new('test.wav') 
f << wav_data.pack('c'*wav_data.length) 
f.close 
FileUtils.mv(f.path, 'c:/') 

Le fichier est là, mais semble brouillé. Vérification dans un éditeur hexadécimal montre que partout le fichier de travail avait un 0A (ou \ n), la version brouillée avait 0D0A (ou \ r \ n)

Je l'utilise en conjonction avec des rails + trombone, et je vais d'utiliser une combinaison de Heroku et S3 pour l'application en direct, donc j'espère que ce problème va se résoudre, mais je voudrais que cela fonctionne sur ma machine locale pour le moment.

Est-ce que quelqu'un sait pour quelle raison FileUtils.mv ferait cela, et s'il y a un moyen de changer son comportement?

Répondre

4

Cela ressemble à un problème de fichier binaire ou de fichier texte. Vous devez définir votre fichier binaire avec File#binmode comme dans:

f = Tempfile.new('test.wav') 
f.binmode 
f << data 

Vous devez avoir eu un deuxième argument open dans votre premier exemple, non? Quelque chose comme "w + b", probablement ... Le "b" signifie binaire.

+1

c'était ça! merci – Lowgain

+1

@Lowgrain: Cool. Vous devriez alors accepter la réponse. Aussi, veuillez corriger votre question afin que le code affiché fonctionne (c'est-à-dire le "w + b" manquant ou quoi que vous utilisiez). –

Questions connexes