2012-09-03 38 views
8

Tôi đang viết chương trình nhỏ ở đồng bằng C tại đây. Điều tôi cần là tạo một tệp trực tiếp bên trong bộ nhớ (không được ghi trên đĩa cứng) Hiện tại tôi có thể sử dụng fopen("filename.txt,"wb") để ghi vào tệp.C - tạo tập tin trong bộ nhớ

Tôi biết rằng trong linux bạn có thể sử dụng fmemopen(). Có một giải pháp tương tự cho win32?

+1

Tại sao? Bạn có mong đợi/cần có thể sử dụng các hàm I/O 'FILE *' thông thường như 'fread()' để đọc từ tệp, khi được tạo không? – unwind

+1

Bạn đang cố gắng giải quyết vấn đề gì? Mục tiêu cuối cùng của bạn là gì? – jweyrich

Trả lời

0

Tôi sẽ không sử dụng fopen vì điều này tạo ra một tệp.

Để tạo tệp trong bộ nhớ, bạn sẽ cần phải tạo tệp và lưu trữ tệp theo cách nào đó mà bạn thấy phù hợp.

Bạn sẽ cần phải tạo một mảng của một số kiểu dữ liệu. Tôi sẽ sử dụng char * nhưng bạn có thể sử dụng bất cứ điều gì bạn muốn mã hóa các thông tin. Sau đó bạn có thể đọc và ghi vào tệp bằng cách thêm thông tin vào mảng.

+0

Cảm ơn bạn đã trả lời, vấn đề duy nhất của tôi là tôi được yêu cầu sử dụng chương trình bên ngoài sử dụng * FILE, vì vậy tôi buộc phải sử dụng nó. Yêu cầu thứ hai là không viết bất cứ thứ gì vào đĩa, tôi đang tìm kiếm một số loại workaround ví dụ như tập tin ảo trong bộ nhớ, ánh xạ bộ nhớ ... –

+0

@J Nash: con trỏ FILE hoàn toàn được thực hiện xác định và không di động trên các trình biên dịch. Nếu chương trình bên ngoài chính nó FILE nội bộ tôi không thể thấy như thế nào sẽ ảnh hưởng đến chương trình của bạn. – Clifford

+0

Xin lỗi tôi đã không giải thích kỹ lưỡng, tôi đang thêm mã hóa vào chương trình hiện tại, điều này khá phức tạp. Nó đọc các tệp đầu vào tồn tại trên đĩa. Hiện tại tôi đang mã hóa các tệp đó trước và giải mã lại bên trong chương trình của mình - tuy nhiên nó tạo ra các tệp "mở không được mã hóa" tạm thời mà không phải là giải pháp an toàn. Cảm ơn –

0

Bạn có thể đạt được thứ gì đó gần với MapViewOfFile. Win32 API bạn nên sử dụng cho việc này là:

CreateFile(...)

CreateFileMapping(...)

MapViewOfFile(...)

Đừng quên unmap và lập bản đồ tập tin gần một khi bạn đã làm xong.

+0

có chức năng nào cho ứng dụng bảng điều khiển C thuần túy không? –

+0

Win32 là một API đồng bằng c. Bạn cần cài đặt Windows SDK và đảm bảo bao gồm các tệp tiêu đề chính xác được chỉ định trên các trang MSDN mà tôi đã liên kết – Indy9000

+0

Để ánh xạ tệp vào bộ nhớ ảo mà bạn không cần 'CreateFile', hãy sử dụng một thẻ xử lý' INVALID_HANDLE_VALUE' (-1) trong 'CreateFileMapping'. – cdarke

0

Chức năng như vậy không thực sự được hỗ trợ trong Windows. Tuy nhiên, bạn có thể viết lại các hàm stdio mức cao để truy cập bộ nhớ đệm thay vì tệp, hoặc chỉ thực hiện các hàm giống như stdio. Hoặc bạn có thể triển khai RAM disk, tuy nhiên việc cài đặt trình điều khiển đĩa RAM có thể không đáp ứng quy tắc "không ghi vào đĩa" của bạn.

Các vấn đề liên quan