ZIPファイルの分割
$filePath = "MyFile.zip"
$partSize = 10MB
$i = 0
$fileStream = [System.IO.File]::OpenRead($filePath)
while ($fileStream.Position -lt $fileStream.Length) {
$i++
$partPath = $filePath + ".part" + $i.ToString("D4")
$partStream = [System.IO.File]::Create($partPath)
$buffer = New-Object Byte[] $partSize
$bytesRead = $fileStream.Read($buffer, 0, $partSize)
$partStream.Write($buffer, 0, $bytesRead)
$partStream.Close()
}
$fileStream.Close()
分割されたファイルの結合とZIPファイルの復元
$outputFile = "RestoredMyFile.zip"
$partFiles = Get-ChildItem -Filter "MyFile.zip.part*"
$fileStream = [System.IO.File]::Create($outputFile)
foreach ($part in $partFiles) {
$partStream = [System.IO.File]::OpenRead($part.FullName)
$buffer = New-Object Byte[] 10MB
while (($bytesRead = $partStream.Read($buffer, 0, $buffer.Length)) -gt 0) {
$fileStream.Write($buffer, 0, $bytesRead)
}
$partStream.Close()
}
$fileStream.Close()
# ZIPファイルにパスワードを設定(7-Zipを使用)
$zipFile = "path\to\your\file.zip"
$password = "yourPassword"
& "C:\Program Files\7-Zip\7z.exe" a -p$password $zipFile
# ファイル分割
# 上記の分割スクリプトをここに挿入
#include <cstdlib>
int main() {
// PowerShellスクリプトのパス
const char* scriptPath = "path\\to\\script.ps1";
// PowerShellスクリプトを実行
std::string command = "powershell -ExecutionPolicy Bypass -File " + std::string(scriptPath);
system(command.c_str());
return 0;
}
作成された分割ファイルの数とファイル名を取得するメソッド
#include <iostream>
#include <filesystem>
#include <vector>
namespace fs = std::filesystem;
std::vector<fs::path> getSplitFiles(const fs::path& directory, const std::string& filePattern) {
std::vector<fs::path> splitFiles;
if (fs::exists(directory) && fs::is_directory(directory)) {
for (const auto& entry : fs::directory_iterator(directory)) {
if (fs::is_regular_file(entry) && entry.path().filename().string().find(filePattern) != std::string::npos) {
splitFiles.push_back(entry.path());
}
}
}
return splitFiles;
}
int main() {
auto directory = fs::current_path(); // 現在のディレクトリを使用
std::string filePattern = ".part"; // 検索するファイルパターン
auto splitFiles = getSplitFiles(directory, filePattern);
std::cout << "Found " << splitFiles.size() << " split files:" << std::endl;
for (const auto& file : splitFiles) {
std::cout << file.filename() << std::endl;
}
return 0;
}