You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

112 lines
3.7 KiB

#!/usr/bin/env python3
"""
Example: Basic MPQ Archive Operations
Demonstrates how to work with MPQ archives using PyStorm
"""
from pystorm import MPQArchive, MPQ_CREATE_ARCHIVE_V2, MPQ_FILE_COMPRESS
import sys
def basic_operations_example():
"""Demonstrate basic MPQ archive operations"""
print("=== Basic MPQ Archive Operations ===\n")
# Create a new archive
print("1. Creating a new archive...")
try:
with MPQArchive("test_archive.mpq", flags=MPQ_CREATE_ARCHIVE_V2) as archive:
print(" ✓ Archive created successfully")
# Add a text file
print("\n2. Adding a text file...")
test_content = b"Hello, MPQ World! This is a test file."
with open("test_file.txt", "wb") as f:
f.write(test_content)
archive.add_file("test_file.txt", "internal/test.txt",
flags=MPQ_FILE_COMPRESS)
print(" ✓ File added successfully")
# Flush changes
archive.flush()
print(" ✓ Changes flushed to disk")
except Exception as e:
print(f" ✗ Error: {e}")
return
# Open and read from the archive
print("\n3. Opening the archive and reading the file...")
try:
with MPQArchive("test_archive.mpq") as archive:
# Check if file exists
if archive.has_file("internal/test.txt"):
print(" ✓ File exists in archive")
# Open and read the file
with archive.open_file("internal/test.txt") as mpq_file:
content = mpq_file.read()
print(f" ✓ File content: {content.decode('utf-8')}")
else:
print(" ✗ File not found in archive")
except Exception as e:
print(f" ✗ Error: {e}")
return
# List files in archive
print("\n4. Listing all files in archive...")
try:
with MPQArchive("test_archive.mpq") as archive:
files = archive.find_files("*")
print(f" Found {len(files)} file(s):")
for file_info in files:
print(f" - {file_info['name']}")
print(f" Size: {file_info['size']} bytes")
print(f" Compressed: {file_info['compressed_size']} bytes")
except Exception as e:
print(f" ✗ Error: {e}")
return
# Extract file
print("\n5. Extracting file from archive...")
try:
with MPQArchive("test_archive.mpq") as archive:
archive.extract_file("internal/test.txt", "extracted_test.txt")
print(" ✓ File extracted successfully")
# Verify extraction
with open("extracted_test.txt", "rb") as f:
extracted_content = f.read()
print(f" ✓ Extracted content: {extracted_content.decode('utf-8')}")
except Exception as e:
print(f" ✗ Error: {e}")
return
# Clean up
print("\n6. Cleaning up test files...")
import os
for file in ["test_file.txt", "extracted_test.txt", "test_archive.mpq"]:
try:
if os.path.exists(file):
os.remove(file)
print(f" ✓ Removed {file}")
except Exception as e:
print(f" ✗ Error removing {file}: {e}")
print("\n=== Example completed successfully! ===")
def main():
"""Main entry point"""
try:
basic_operations_example()
except KeyboardInterrupt:
print("\n\nInterrupted by user")
sys.exit(1)
except Exception as e:
print(f"\n\nUnexpected error: {e}")
sys.exit(1)
if __name__ == "__main__":
main()