2013-05-03 37 views
8

Tôi đang sử dụng hàm thư viện .NET để tải tệp lên máy chủ và lấy tham số là đường dẫn đến tệp. Dữ liệu tôi muốn gửi là nhỏ và được xây dựng khi chạy. Tôi có thể lưu nó vào một tập tin tạm thời và sau đó tải nó lên.Tạo tệp trong bộ nhớ không phải là hệ thống tệp

Vì ứng dụng của tôi sẽ được triển khai trong nhiều môi trường khác nhau và tôi không biết liệu tôi có thể tạo tệp tạm thời một cách đáng tin cậy hay không, nó sẽ thích hợp hơn để có thể chuyển sang đường dẫn ảo trong bộ nhớ.

Tôi không thể thay đổi thư viện; Tôi biết nó thực thi những điều sau đây trên tệp:

LibraryUploadFunction(string filename) { 
    fileName = Path.GetFullPath(fileName); 
    FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); 
    ... 
} 

Có thể tránh ghi tệp vào đĩa không?

Cảm ơn

Edit:

Thư viện gọi là Webclient.UploadFile, như đã chỉ ra trong các câu trả lời, có nhiều cách giải quyết có thể, trong đó có sử dụng các thư viện khác, trong đó có rất nhiều.

+0

Thư viện nào? – JDB

+0

Tôi cringe khi một thư viện ngây thơ chỉ hoạt động với các tập tin trên đĩa. Một tập tin là một chuỗi có tên là byte, vì vậy trong tên của tất cả mọi thứ thánh, chấp nhận một dòng và một chuỗi cho tên. –

Trả lời

10

Không, thư viện của bạn về cơ bản không linh hoạt trong khía cạnh này, bởi thực tế là nó sử dụng FileStream.

Options:

  • Sử dụng một ramdrive và chỉ định một con đường trên đó, để tránh thực sự đánh đĩa
  • Tùy thuộc vào nơi thư viện đến từ đâu, hoặc yêu cầu thay đổi (nếu đó là nguồn đóng) hoặc chỉ thực hiện thay đổi nếu đó là mã nguồn mở
  • Sử dụng một thư viện khác. (Điều gì đặc biệt về điều này?)
6

Nếu thư viện hiển thị phương thức khác chấp nhận Stream, bạn có thể sử dụng MemoryStream.

Nếu nó chấp nhận SafeFileHandle, bạn có thể sử dụng MemoryMappedFile.

Nếu không, bạn sẽ phải hài lòng với tệp trên đĩa.

2

Nếu tôi hiểu chính xác bạn, bạn muốn sử dụng một trong các phương pháp WebClient.Upload* khác. Ví dụ: nếu bạn có dữ liệu của mình trong một số byte[], hãy sử dụng UploadData.

Tùy chọn khác, nếu bạn muốn tải lên dữ liệu dưới dạng luồng là sử dụng OpenWrite.

+0

Tôi đã thử dùng UploadString và giờ tôi đã thử dùng UploadData. Tôi có thể đào sâu vào định dạng của POST mà WebClient tìm ra để xác định chính xác vị trí của vấn đề, nhưng điều đó sẽ đánh bại mục đích của việc sử dụng một máy khách http đơn giản như WebClient. Các tập tin tạm thời là – Stefan

+0

@Stefan Nó đã khiến máy chủ của bạn khởi động lại *? Sau đó, có điều gì đó rất sai với máy chủ của bạn và bạn nên tìm hiểu xem nó là gì. – svick

+0

Hehe ... nó không phải là máy chủ của tôi.Đó là một mạng được kết nối với thiết bị nhúng, nằm ngoài tầm kiểm soát của tôi. Có hàng ngàn thứ này trong lĩnh vực này. Vì vậy, khá nhiều tôi đang mắc kẹt với việc gửi yêu cầu trong một định dạng nó thích. Ít nhất tôi biết một cách để có được dữ liệu thành công, vì vậy tôi có thể sống với điều đó! – Stefan

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