Как увеличить вес файла txt
Иногда для тестирования какой-то системы (взаимодействия программ, электронная почта, фильтры), требуется создать файл определенного размера. ОС Windows имеет два стандартных инструмента для создания файла произвольного размера.
Содержание
- Создать файл с помощью командной строки
- Создать файл с помощью PowerShell
Создать файл с помощью командной строки
Для создания файла заданного размера с помощью командной строки Windows используйте команду fsutil . Размер файла для этой команды указывается в байтах.
Создать файл TestFile.txt размером 1 МБ:
fsutil file createnew D:\TestFile.txt 1048576
Если при создании файла в указанном размещении вы получаете « Ошибка: Отказано в доступе » — запустите командную строку от имени администратора .
Создать файл с помощью PowerShell
Создать пустой файл заданного размера
Для создания файла определенного размера с Windows PowerShell используйте последовательность команд (размер файла указывается в: Kb, Mb, Gb):
$file = New-Object -TypeName System.IO.FileStream -ArgumentList D:\TestFile.txt,Create,ReadWrite
$file.SetLength(1Mb)
$file.Close()
Windows PowerShell создаст пустой файл (заполненный символами NULL), выбранного размера.
Если при создании файла в указанном размещении вы получаете ошибка: « New-Object : Исключение при вызове «.ctor» с «3» аргументами: «Отказано в доступе по пути … » — запустите Windows PowerShell от имени администратора .
Ошибка: «Отказано в доступе по пути» при создании файла Ошибка: «Отказано в доступе по пути» при создании файлаСоздать непустой файл заданного размера
Для создания не пустого файла (случайное содержимое) размером 1 Мб, выполните команды Windows PowerShell:
$array = New-Object -TypeName Byte[] -ArgumentList 2Mb
$obj = New-Object -TypeName System.Random
$obj.NextBytes($array)
Set-Content -Path D:\TestFile.txt -Value $array -Encoding Byte
Скорость создания файла будет зависеть о указанного размера файла и характеристик вашего компьютера.
Создание непустого файла произвольного размера используя Windows PowerShell Создание непустого файла произвольного размера используя Windows PowerShellСоздать несколько файлов заданного размера
Создать 5 непустых файлов (случайное содержимое) размером 1Мб, используя Windows PowerShell:
$array = New-Object -TypeName Byte[] -ArgumentList 1Mb
$obj = New-Object -TypeName System.Random
$obj.NextBytes($array)
for ($i=1; $i -le 5; $i++)
Скорость создания файлов будет зависеть от указанного размера файлов и характеристик вашего компьютера.
В большинстве случаев файл представляет собой сжатую информацию. Она сжата соответственно формату в целях уменьшения размера объекта, зачастую это ведет к потере качества. В случае малого размера, использовать такие файлы удобно, потому как они быстрее скачиваются и обрабатываются. Но у этого есть и обратная сторона – некоторые файлообменники могут не принять наш файл из-за того, что он слишком маленького размера, в этом случае необходимо увеличить размер.
- Как увеличить размер файла
- Как изменить размер файла
- Как изменить размер фото
- - компьютер
- - подключение к сети Интернет
В случае, если вам необходимо увеличить размер картинки, вы можете увеличить ее площадь через редактор. Специфическая обработка также повышает размер файла. Если мы не хотим менять площадь изображения, а хотим поменять только сам размер, то мы можем сохранить без компрессии при помощи использования форматов, которые не имеют компрессии совсем, такие, как файлы с расширением ".bmp".
Для того, чтобы изменить размер аудиотрека, его необходимо открыть через редактор. После того, как вы его откроете, сохраните его, указав в настройках более высокий битрейт, чем есть в настоящий момент. Качество файла не изменится, но в силу установок программы размер аудиотрека изменится. Также можно сохранить трек, используя формат расширения ".wav", который не является форматом сжатия, как и формат ".raw", соответственно, за счет этого размер его также увеличивается.
Если вам необходимо увеличить размер видеофайла, вы должны открыть его через специальный редактор, а после этого сохранить его с настройками более высокого качества и меньшей степенью компрессии. Также вы можете изменить расширение, в котором вы сохраняете файл, на то, которое поддерживает наименьшую степень компрессии.
Прежде всего скажем, что речь здесь пойдет о файловых системах FAT и NTFS, как наиболее распространенных, и ничего не будет сказано о файловых системах, используемых в не-Windows системах, поскольку такие системы лежат вне сферы интересов автора. А теперь – к делу.
Казалось бы, какая неоднозначность может быть, если говорить о размере файла. Сколько в него данных записали, такой и размер (или длина). Сколько в нем есть байтов от начала до конца (и это число записано в файловой системе в качестве размера файла), такой и размер, не так ли? Как говорил Шельменко-денщик, так то оно так, да только трошечки не так.
Проведите эксперимент. Возьмите любой исполняемый файл и выполните его копирование командой
copy что-то.exe что-то-другое.exe
Если вы раньше с этим сталкивались, то уже знаете, что результирующий файл получится намного короче исходного и не будет копией. Причина простая: программа copy, запущенная без параметра /b, копирует файл до тех пор, пока не встретит байт с кодом 27h, этот символ называется «конец файла».
Итак, у нас уже есть два разных признака конца файла – по числу, записанному в файловой системе, и по специальному байту в теле файла. Правда, стоит отметить, что второй признак остался с тех времен, когда файлы были преимущественно текстовыми и сейчас практически не применяется.
В файловых системах, использующих кластеры, а FAT и NTFS относятся именно к таким ФС, есть еще третий размер – размер файла на диске, то есть суммарный размер кластеров, отведенных этому файлу. В файловых системах FAT этот размер больше размера собственно файла или равен ему. Разница между размерами, если она есть, – так называемый хвост файла – это напрасно пропадающее место на диске, плата за размещение файлов по кластерам, а не встык друг за другом, хотя файловые системы с таким размещением файлов тоже существуют.
Впрочем, иногда это место используется. В частности, во времена дискет существовали программы, которые позволяли записывать данные в хвосты файлов, чтобы скрытно передать на таких дискетах информацию. Ведь стандартными средствами получить доступ к хвостам файлов нельзя.
Если включить в рассмотрение NTFS, то картина дополнится новыми штрихами.
Прежде всего, размер файла на диске может оказаться меньше собственно размера файла.
Если тело файла помещается в свободную область файловой записи MFT, то этот файл не занимает на диске ни одного кластера.
Максимальный размер такого файла зависит от размера записи и составляет примерно 600 байтов для записи мелкого размера (1 Кб) и 3600 – для записи крупного размера (4 Кб). Следует, впрочем, отметить, что до недавнего времени Windows показывала размер такого файла на диске равным одному кластеру, хотя фактически ни одного кластера файлу не выделено.
Если файл сжат, то его размер на диске может быть заметно меньше собственно длины файла (количества данных в нем).
Дополнительно усложняют картину так называемые разреженные файлы. В них полезные данные содержаться только в определенных участках файла, а остальная часть файла не используется вовсе. Возьмем в качестве примера файл журнала изменений \$Extend\$UsnJrnl, имеющийся почти на каждом компьютере (не пытайтесь увидеть его в проводнике или других диспетчерах файлов, не получится).
Он может иметь длину несколько гигабайт, но значимых данных содержит при этом обычно только 32 мегабайта в самом конце. А остальная часть вообще никаких данных не содержит, места на диске не занимает, и при попытке прочитать данные из этой части система выдаст набор нулей, даже не обращаясь к диску.
Если у читателя возникнет желание поэкспериментировать с разреженными файлами, такой файл можно создать с помощью команды fsutil sparse. А на досуге можно обдумать, какова же настоящая длина файла, если система записала в соответствующую графу число 4 Гб, а реальных данных в файле только 32 Мб и на диске он занимает тоже 32 Мб.
И, наконец, расскажем еще об одной длине: длине действительных данных (valid data). Эта длина и устанавливающие ее функции представляют интерес почти исключительно для программистов, тем не менее изредка с ней могут столкнуться и обычные пользователи.
В файловых системах FAT такого понятия не существует, и функции, которые используют эту величину, записывают в тело файла на соответствующих местах нули. В NTFS эта длина является характеристикой файла.
Попробуем пояснить, о чем идет речь, на примере. Возьмите флешку (флешка используется для наглядности, поскольку она медленнее жесткого диска работает с большими объемами данных) размером от гигабайта, отформатированную в FAT32, и создайте на ней большой файл командой
fsutil file createnew k:\пробный.txt 900000000
Теперь отформатируйте флешку в NTFS, для чистоты эксперимента лучше взять ту же самую, и повторите создание файла. На этот раз операция пройдет практически моментально. Записывать нули в тело файла уже не надо, достаточно распределить место под файл и установить для него длину действительных данных равной нулю. В теле файла останется «мусор», который был записан в этих секторах, но при чтении данных обращения к этим данным не произойдет – обнаружив, что длина действительных данных равна нулю, все, что дальше этого нуля, система читать не станет – ведь эти данные недействительны. Их можно сделать действительными, если изменить значение длины действительных данных.
Рассмотрим это на примере. Создайте новый файл на одном из рабочих дисков, отформатированном в NTFS. Сотни мегабайт совершенно не обязательны, десятка-другого килобайт будет вполне достаточно:
fsutil file createnew C:\пробный.txt 10000
Теперь откройте его с помощью любого просмотрщика файлов, например FAR.
Как видим, в файле действительно нули. Но если посмотреть на этот файл с помощью какого-либо редактора дисков, обращающегося к секторам напрямую, например dmde, то картина будет другая.
Если мы откроем том С как логическое устройство и посмотрим на содержимое файла, то увидим те же самые нули.
Но если открыть диск как физическое устройство, то в том же самом секторе (обратите внимание на номера LBA – разница в 63 возникла из-за того, что начало раздела сдвинуто относительно начала диска) увидим данные, которые ранее были записаны в какой-то позже удаленный файл.
И если мы увеличим длину действительных данных, то увидим эти данные в файле. Установим эту длину равной 300 байт:
fsutil file setvaliddata C:\пробный.txt 300
Обратите внимание что параметр в этой команде нельзя задавать произвольно, но должен быть не меньше текущего значения длины действительных данных и не больше размера файла. Уменьшить длину действительных данных этой командой нельзя.
Теперь снова посмотри на содержимое файла. Заметьте, что никаких данных мы в него не записывали!
Чисто случайно получилось, что в этом файле довольно много осмысленного текста, что делает картину более наглядной. 300 десятичных байтов – это 12c шестнадцатиричных, и как раз на этом байте обрывается текст и начинаются нули. Если сдвинуть границу действительных данных еще дальше, то «проявятся» и следующие строки.
Подведем итоги
Имеется две физических длины файла – это размер файла, записанный в файловой системе и место, занимаемое на диске. Также имеется две логических длины файла – это признак конца файла (байт EOF – 27h) и длина действительных данных. Как составную часть логической длины можно рассматривать и пустые области в разреженных файлах – вспомните \$Extend\$UsnJrnl, где большой массив отсутствующих данных завершается тридцатью двумя мегабайтами действительных.
Итак, обычно, когда говорят о длине файла, имеют в виду число, хранящееся в файловой системе. Но, как видите, возможны варианты!
Maitris » 28.08.2005 (Вс) 23:18
Вот тут такая тема.. Надо увеличить размер файла до размера другого файла, точно в байтах. Причем сделать это программно, из проги на Vb.Что такого можно дописать в конец exe к примеру, чтобы это кикак не отразилось на его выполнении? И что насчет остальных типов файлов?
tyomitch » 29.08.2005 (Пн) 0:12
Maitris писал(а): Вот тут такая тема.. Надо увеличить размер файла до размера другого файла, точно в байтах. Причем сделать это программно, из проги на Vb.Open For Append и вперёд.
Maitris писал(а): Что такого можно дописать в конец exe к примеру, чтобы это кикак не отразилось на его выполнении? Maitris писал(а): И что насчет остальных типов файлов?BV » 29.08.2005 (Пн) 0:30
tyomitch » 29.08.2005 (Пн) 1:29
BV писал(а): Почему именно нули? Написать можно и vbNullChar.Дык, об этих нулях, которые '\0', и речь.
Расскажи лучше: ты картинку в подписи руками меняешь, или у тебя там автогенерилка?
BV » 29.08.2005 (Пн) 2:21
Kovu » 29.08.2005 (Пн) 11:11
Maitris писал(а): Что такого можно дописать в конец exe к примеру, чтобы это кикак не отразилось на его выполнении?Нули.
[quote]
Ну ещё можно через Put запихивать что угодно Если всё делать своими ручками, они скоро отвалятся !
CodeName33 » 29.08.2005 (Пн) 14:02
Проще Seek до необходимого размера и Put один байт.alibek » 29.08.2005 (Пн) 14:11
А зачем Seek? Put можно сразу в произвольную позицию. Правда тогда хвост файла будет slack-ами забит, но я так понимаю, что автору это пофиг.CodeName33 » 29.08.2005 (Пн) 14:44
GSerg » 29.08.2005 (Пн) 15:01
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме васCodeName33 » 29.08.2005 (Пн) 15:04
GSerg , неа, не мусором. А нули - это нули (CByte(0) - этим и будет забит каждый байт), проверь.alibek » 29.08.2005 (Пн) 15:26
CodeName33 писал(а): GSerg , неа, не мусором. А нули - это нули (CByte(0) - этим и будет забит каждый байт), проверь.Я проверял.
Нули могут быть только на только что купленном винте.
tyomitch » 29.08.2005 (Пн) 15:31
Загрузчик Винды забивает в память нули после конца PE-образа.Т.е. если добивать его нулями, то ничего не изменится.
А если всяким мусором (Kovu), то программа свалится, если ей там действительно были нужны нули.
CodeName33 » 29.08.2005 (Пн) 15:40
alibek Нули, вот код на забивку около 700 мегов
И забивается чисто нулями - целиком и полностью, а это диск C, на который уже писалось - переписывалось по 1000 раз.
ГЫ! Прошлый код срабатывал мгновенно, а вот этот код,
что странно работает ооооочень долго, поскольку VB видимо через WriteFile, самостоятельно нулями начинает забивать файл. Почему не ясно.
Допустим, есть какой-то произвольный файл, который имеет вес N КБ.
Можно ли изменить размер файла в большую сторону при этом не потеряв свойств файла(файл по прежнему открывается в программах, которых открывался ранее и не должен отображаться как-то иначе) или подобная манипуляция будет напрямую зависеть от формата над которым это будет делаться?
Например, дополнить незначащими 0 .
Однозначно зависит от формата и от того, как формат читается. ZIP-файлы, к примеру, должны читаться с хвоста и добавление в хвост лишней информации может привести к нечитаемости. Но большинство софта кладут на спецификацию и читают ZIP с головы.
9,596 4 4 золотых знака 19 19 серебряных знаков 35 35 бронзовых знаковДля изменения размера файла предусмотрена группа системных вызовов truncate(2). Одноимённая утилита позволит получить возможность вызывать их из командой строки. Например, следующая команда установит новый размер указанного файла равным 17 ТБ. Причём, если его размер был больше, содержимое будет урезано, если он был меньше, содержимое будет дополнено нулевыми байтами. Стоит отметить, что в последнем случае файл получится разреженным - в реальности на диске не будут храниться сполшные нули, а будет просто пометка в дескрипторе файла, что он содержит нулевые блоки. Это довольно эфективно.
Эта команда не изменяет все остальные свойства файла, она влияет только на содержимое и размер.
Читайте также: