2010-01-19 7 views
5

Rozważam napisanie aplikacji w C#/.NET, która programowo zmieni plik XML na komputerze użytkownika i próbuję ustalić, czy Silverlight (i które wersje, w jakich trybach) będą działać w tym zadaniu.Czy Silverlight może zmienić plik na komputerze lokalnego użytkownika?

Oto workflow:

  • Użytkownik wybiera plik
  • Aplikacja modyfikuje plikowi
  • aplikacja zapisuje plik, zastępując oryginalny plik

Jest to możliwe w Silverlight? Jeśli tak, w jakich wersjach i na jakich warunkach?

+0

Mam nadzieję, że Silverlight nie będzie mieszał się z moimi plikami. – zneak

+0

Wiem, że Silverlight jest ślepy na twoje pliki, chyba że specjalnie wybierzesz plik (który, jak sądzę, musi być przez okno dialogowe). To, co mnie interesuje, to to, że jeśli użytkownik zdecyduje się wydać pozwolenie na aplikację SL (jeśli jest to nawet możliwe), może SL, a następnie przesłać z powrotem do pierwotnej lokalizacji przez strumień IO. –

Odpowiedz

2

Niektóre odpowiedzi koncentrują się na pojedynczej pamięci. Jeśli żadna inna aplikacja nie potrzebuje dostępu do tych danych, być może odpowiedź jest dla Ciebie. Ten link to blog opisujący, w jaki sposób Pojedyncza pamięć masowa jest używana w pigułce.

Podejrzewam, że to prawdopodobnie nie jest to, co chcesz, ponieważ masz użytkownika wybrać plik.

Z pewnością w SL3 użytkownik może wybrać plik, a następnie go odczytać.

Jednak, aby go jeszcze raz zapisać, musiałbyś pokazać użytkownikowi okno dialogowe "Zapisz plik", aby uzyskać strumień plików, do którego możesz pisać.

W SL4 z uruchomionym programem OOB z podwyższonymi prawami dostępu można zapisywać pliki takie jak ten bezpośrednio w folderze użytkowników, takim jak Moje dokumenty.

Edit

Wystarczy być absolutnie jasne, nie można zapisać do pliku, która została objęta pomocą OpenFileDialog tylko do odczytu, nie można przeczytać w pliku, który jako nabyte za pomocą SaveFileDialog tylko pisać.

+0

Dzięki za szczegółową odpowiedź. Kiedy mówisz 'Jednakże, aby zapisać go ponownie, musiałbyś pokazać użytkownikowi okno dialogowe" Zapisz plik ", aby uzyskać strumień plików, do którego możesz pisać." Czy jest to możliwe w SL3 lub wymaga SL4? ? –

+0

Tak, chyba że ustalono inaczej, mam na myśli aktualną wersję SL3. Możesz wyświetlić okno dialogowe Zapisz w instancji SL3 w przeglądarce, użytkownik wybiera plik i jako taki nadał Twojemu kodowi prawo zapisu do wybranego pliku zgodnie z jego potrzebami. OpenFileDialog daje 'FileInfo' (s), na których można" OpenRead ", ale nie' OpenWrite' podczas gdy SaveFileDialog daje 'FileInfo' (s), na których można' OpenWrite', ale nie może 'OpenRead'. – AnthonyWJones

+1

Ok. Myślę, że ma to sens. Więc jeśli chciałem zmodyfikować plik użytkownika, 1) poprosiłbym użytkownika o plik, 2) zmodyfikuję plik w kodzie, a następnie 3) zapytam użytkownika, gdzie zapisać plik. Jeśli użytkownik zdecyduje się zastąpić oryginalny plik, jest to jego wybór, ale użytkownik musi jeszcze określić, gdzie zapisać plik. –

1

SL3 umożliwia dostęp do izolowanej powierzchni magazynowej, SL4 otwiera dostęp nawet dalej do zaufanych aplikacji pozwalających im na dostęp do plików z folderu Moje, MyPictures itp

+0

czy możesz rozwinąć to i wyjaśnić, jak to może działać? W szczególności, czy będę w stanie zrealizować mój workflow w SL3 i na jakich warunkach? –

3

Środowisko wykonawcze silverlight działa wewnątrz "piaskownicy" zabezpieczeń.

Możesz uzyskać dostęp do plików z dysku twardego komputera tylko za pośrednictwem okna dialogowego Otwórz plik. Możesz czytać i pisać od Isolated Storage używając Silverlight 2 i wyżej.

Coming w Silverlight 4 będziesz miał możliwość dostępu do plików z „specjalnych katalogów”, takich jak Moje dokumenty, Moja muzyka, Moje obrazy itp (http://weblogs.asp.net/nmarun/archive/2009/11/27/local-file-access-silverlight-4.aspx)

+0

Czy odczyt i zapis zastosują zmiany do oryginalnego pliku, do którego można uzyskać dostęp za pomocą okna dialogowego Otwieranie pliku? –

+0

Również do jakiej wersji ma to zastosowanie? –

1

Silverlight aplikacje nie mogą zmienić dowolnych plików na użytkownika komputer. Jednak są one w stanie przechowywać pliki lokalnie za pomocą Isolated Storage:

W Framework, odizolowanych przechowywania jest mechanizmem, który umożliwia przechowywanie częściowo zaufanych aplikacji do zapisywania danych na lokalnym komputerze bez naruszania jakichkolwiek zasad bezpieczeństwa ustawić na komputerze. Oddzielna pamięć jest dostępna od pierwszej wersji platformy .NET i jest szczególnie przydatna w przypadku pobranych, częściowo zaufanych składników, które zwykle nie mają dostępu do standardowych mechanizmów we/wy. Tym samym aplikacjom zwykle przyznaje się prawo do korzystania z izolowanego magazynu. W ten sposób aplikacje pochodzące z potencjalnie niezaufanych źródeł mogą nadal wykonywać pewne operacje wejścia/wyjścia dysku, aczkolwiek w kontrolowany sposób.

Możesz przeczytać więcej na ten temat w artykule:

Silverlight and Local Storage

+0

Dzięki za link "Silverlight and Local Storage." Dotyczy to jednak wersji 2.0 Silverlight. Zastanawiam się, czy od tego czasu wykonano więcej pracy. –

+0

Wygląda na to, że Silverlight 4.0 wprowadza 'SaveFileDialog' (http://msdn.microsoft.com/en-us/library/system.windows.controls.savefiledialog%28VS.95%29.aspx). Jednak umożliwia to użytkownikom określenie lokalnej nazwy pliku, aplikacje nie mogą samodzielnie wybrać lokalizacji. –

1

OS wbudowaną Plik Otwórz/Zapisz dialogowe pozwala Silverlight dostępu/modyfikować dowolny plik określony przez użytkownika, zwracając strumień plików, do którego aplikacja Silverlight ma dostęp.

Poza tym aplikacja Silverlight ma dostęp do własnego, odizolowanego miejsca.

+0

do jakiej wersji ma to zastosowanie? –

+0

Okno dialogowe pliku dotyczy wersji 2.0 i nowszych. Uważam, że Magazyn izolowany dotyczy wszystkich wersji. – Aaron

Powiązane problemy