Co dokładnie dzieje się, gdy używasz polecenia „kopiuj / b”?


13

Dzisiaj właśnie odkryłem, że mogę scalić niektóre pliki za pomocą copy /bpolecenia. W szczególności zauważyłem, że kiedy scaliłem dwa pliki mp3, odtwarzacz VLC wykazywał zabawne zachowania z timingiem:

             Weź 1

Tutaj jest to całkiem normalne, ale pierwsza muzyka dobiegła końca ... potem nastąpiła zabawna część…

            Weź 2              Weź 3

Tutaj czas poszukiwania dosłownie biegł tak, jak grał.

Po połączeniu zdjęć lub plików PDF z tą techniką odkryłem, że rozmiar pliku wzrośnie prawidłowo, ale wyświetli się tylko pierwsze zdjęcie.

Więc moje pytanie brzmi: co dokładnie robi copy /bpolecenie? Czy to naprawdę jest przeznaczone do łączenia plików, czy to hack?

Odpowiedzi:


17

/bFlag z copysmakołyki dowodzenia pliki jako binarne (tj surowego strumienia bezsensownych bajtów), a kopie ich bajt do bajta zamiast domyślnego (lub /a) zachowań, które traktuje je jako wiersze tekstu (z end-of-line znaki, koniec plików itp.)

Możesz łączyć pliki tekstowe z domyślnym zachowaniem tekstu lub przełącznikiem binarnym, ale prawie żaden plik binarny nie będzie działał. Nie można po prostu skopiować bajtów z dwóch plików binarnych i oczekiwać, że będą działać, ponieważ pliki binarne zwykle mają nagłówki , metadane , struktury danychitp., które określają format pliku. Jeśli wykonasz kopię binarną, po prostu skopiujesz wszystkie bajty bez zmian, co ostatecznie spowoduje umieszczenie tych struktur w miejscach, w których nie powinny być, więc po ich otwarciu funkcja parsowania będzie miała problemy i zobaczy, co to są zasadniczo uszkodzone dane . Niektóre programy zignorują części, które nie mają sensu, i po prostu pokażą, co potrafią (co pozwala na działanie stereografii), ale niektóre zgłoszą błąd i będą skarżyć się, że plik jest uszkodzony. Zdolność do wykrywania uszkodzeń zależy od typu pliku.

Jako przykład wymyślmy uproszczony format PDF:

Byte(s)    Meaning
---------------------

File header:
0-1        # of Pages
2-3        Language
4-5        Font
6-EOF      Data (each page encoded separately)

Page data:
0-1        Page number
2-3        # of characters on page
4-#chars   Letters contained on the page

Jak widać, każdy plik będzie zawierał nagłówek na poziomie pliku z pewnymi ogólnymi informacjami, a następnie bloki danych dla każdej strony zawierającej dane strony. Jeśli następnie weźmiesz dwa pliki, każdy zawierający jedną stronę i scalisz je jako pliki binarne, nie będziesz tworzyć jednego pliku dwustronicowego, ale zamiast tego jeden uszkodzony plik, który zaczyna się od jednej strony, a następnie zawiera kilka śmieci (plik nagłówek nie ma sensu, gdy program próbuje odczytać drugą stronę).

To samo dzieje się z plikami MP3. Po połączeniu ich w ten sposób tagi ID3 na początku i / lub końcu drugiego pliku zostają zachowane, a gdy odtwarzacz próbuje odczytać następną klatkę, oczekuje danych audio, ale znajduje nagłówek drugi plik, który nie pasuje do oczekiwanego formatu danych audio, więc nie wie, co robić. Niektóre odtwarzacze będą odtwarzać nagłówek jako dane audio (które prawdopodobnie będą odtwarzane jako static / noise / pops / etc.), Niektóre wycinają dźwięk do następnej poprawnej klatki, niektóre mogą całkowicie przestać odtwarzać utwór, a niektóre mogą nawet ulec awarii .

copyKomenda nic nie wie o typach plików innych niż zwykły tekst (a nawet wtedy, tylko tekst ASCII), więc tylko zwykły tekst mogą być łączone ze sobą prawidłowo. Pliki binarne należy łączyć za pomocą edytora, który wie, jak poprawnie parsować i interpretować zawartość.


Nicea, VLC odtwarza zarówno pliki mp3, a nawet stara poprawnie jednak jedynym problemem jest to, że nie tylko chcą zobaczyć różnice czasów ...
Chibueze Opata

Cóż, jak powiedziałem, niektóre programy są odporne na uszkodzenia plików. Algorytm parsowania VLC może pomijać „uszkodzone” ramki, ale ponieważ nie są one rzeczywistymi ramkami, nie ma możliwości poznania prawidłowej długości, więc przeskakuje. To tak, jakbyś załadował wymyślony wyżej dwustronicowy plik PDF; czytelnik nie wiedziałby, ile stron faktycznie jest. Najlepszym rozwiązaniem w przypadku plików MP3 jest usunięcie tagów, aby przed zrobieniem kopii binarnej było tylko kilka ramek audio.
Synetech,

1

W twoim przykładzie, w przypadku plików MP3, prawdopodobnie zachowuje się dziwnie z powodu sposobu kodowania plików MP3. Na przykład tagi ID3v1 to ostatnie 128 bajtów pliku MP3 (tj. Wykonawca, album itp.). Tych informacji nie można „odtworzyć”. Gdy VLC lub inny odtwarzacz multimedialny otworzy plik MP3, odtworzy (prawdopodobnie) pierwszy plik MP3, będzie działał zabawnie dla informacji, a następnie może odtworzy resztę pliku. Nie mam teraz załadowanego systemu Windows, więc nie mogę na pewno przetestować.

Zakładam, że jest to to samo, co obrazy i filmy; w zależności od sposobu kodowania plików zależy od tego, jak pliki się „połączą”. Wyobrażam sobie, że ta funkcjonalność pochodzi z czasów DOS, kiedy wszystko było zwykłym tekstem


1

Dawno, dawno temu, w starych dobrych czasach Win ME, po prostu łączyłem klipy wideo. Nie działało cały czas, ale działało przez pewien czas.

To jest przykład polecenia, którego użyłem:

copy /b movie1.mpg + movie2.mpg + movie3.mpg movie4.mpg

Jeśli filmy nie były zbyt duże i miały ten sam typ, liczbę klatek itp., Zazwyczaj łączyły się bezbłędnie. Nie próbowałem ostatnio czegoś takiego.


-1

Jeśli chodzi o MP3, z grubsza to, co jest po nagłówku, można odczytać jako dane. Jest ta gra, Sonic 3 w Sega Genesis i kolejna gra o nazwie Sonic & Knuckles. Oryginalna kaseta Sonic & Knuckles miała gniazdo przeznaczone do wstawiania innych gier, ale po dodaniu Sonic 2, a zwłaszcza 3, prawdopodobnie suma kontrolna uruchomiłaby inny zestaw wskaźników, gra zachowywałaby się inaczej. Na wczesnym etapie korzystania z ROM-u, ilekroć chcieliśmy umieścić dwa naboje do pracy tak, jak było w sprzęcie, używaliśmy copy /b sonick.bin+sonic3.bin sonic3k.bin. W ten sposób ich scalenie dałoby jeden wielki ROM, w którym Sonick miałby zestaw instrukcji (wskaźniki), aby użyć zasobów sonic3.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.