czym zastąpić StorageFolder aby na pulpicie lub w dowolnej lokalizacji utworzyć plik

0

Cześć.
w prostej aplikacji UWP poniższa procedura z założenia w celu wydruku sobie raportu z przebiegu programu działa poprawnie...

  
            private async void UtworzWpiszTekst()
        {
            /* na podst.:  https://github.com/Microsoft/Windows-universal-samples/blob/master/Samples/FileAccess/README.md
           //-1-
using Windows.Storage;
using System.Threading.Tasks;
//
//using System;
using System.Reflection;
using System.Text;
//
            //-2-
            StringBuilder sb = new StringBuilder();
            int xxx = 0;
            //
            //-3-
            sb.AppendLine("aaaaaaaaa");
            /**/
            //----------------------------------------------------------------------------------------------------------------------------------------------------
            // 01- Utwórz plik w bibliotece Pictures - Wykorzystuje jedną z StorageFolder . CreateFileAsync metody do utworzenia pliku.
            StorageFolder localFolder = Windows.Storage.ApplicationData.Current.LocalFolder;// Get the app's local folder.
            //                                                                        
            DateTime dateTime = DateTime.Now;// Create date/time to format and display.
            string dt = dateTime.Year.ToString() + "-" + dateTime.Month.ToString() + "-" + dateTime.Day.ToString() + "-" + dateTime.Hour.ToString() + "-" + dateTime.Minute.ToString() + "-" + dateTime.Second.ToString();
            //                                                                        
            string desiredName = "000- " + dt + ".txt";// Create a new file in the current folder. Raise an exception if the file already exists.
            StorageFile newFile = await localFolder.CreateFileAsync(desiredName);
            // 01- Utwórz plik w bibliotece Pictures - Wykorzystuje jedną z StorageFolder . CreateFileAsync metody do utworzenia pliku.
            //----------------------------------------------------------------------------------------------------------------------------------------------------
            //
            //----------------------------------------------------------------------------------------------------------------------------------------------------
            // 03- Pisanie i czytanie tekstu w pliku - Używa FileIO . WriteTextAsync i FileIO.ReadTextAsync metody zapisu i odczytu pliku. Aby uzyskać więcej informacji, zobacz Tworzenie, zapisu i odczytu pliku .
            if (desiredName != null)
            {
                try
                {
                    if (!String.IsNullOrEmpty(sb.ToString()))//userContent))
                    {
                        await FileIO.WriteTextAsync(newFile, sb.ToString());// userContent);
                    }
                    else
                    {
                        //rootPage.NotifyUser("The text box is empty, please write something and then click 'Write' again.", NotifyType.ErrorMessage);
                    }
                }
                catch (FileNotFoundException)
                {
                    // rootPage.NotifyUserFileNotExist();
                }
                catch (Exception)
                {
                    // I/O errors are reported as exceptions.
                    //rootPage.NotifyUser(String.Format("Error writing to '{0}': {1}", file.Name, ex.Message), NotifyType.ErrorMessage);
                }
            }
            else
            {
                //rootPage.NotifyUserFileNotExist();
            }
            // 03- Pisanie i czytanie tekstu w pliku - Używa FileIO . WriteTextAsync i FileIO.ReadTextAsync metody zapisu i odczytu pliku. Aby uzyskać więcej informacji, zobacz Tworzenie, zapisu i odczytu pliku .
            //----------------------------------------------------------------------------------------------------------------------------------------------------
            //
            //----------------------------------------------------------------------------------------------------------------------------------------------------
            // 08- Skopiuj plik - Wykorzystuje jedną z StorageFile . CopyAsync metod, aby skopiować plik.
         //   StorageFolder picturesLibrary = await KnownFolders.GetFolderForUserAsync(null /* current user */, KnownFolderId.DocumentsLibrary);//.PicturesLibrary);
         //   await newFile.CopyAsync(picturesLibrary, desiredName + " - 002 - sample - Copy.txt", NameCollisionOption.ReplaceExisting);
            // 08- Skopiuj plik - Wykorzystuje jedną z StorageFile . CopyAsync metod, aby skopiować plik.
            //----------------------------------------------------------------------------------------------------------------------------------------------------
            //
        }
       //
        private void Button()
        {
            sb.AppendLine("-------------------------------------------------------");
            //
            for (int xxx = 0; xxx <= 10; xxx++)
            {
                sb.AppendLine("This is a sentence.: " + xxx.ToString());
            }
            xxx++;
        }
        //

jednakże wpięta do projektu UWP zawierającym Microsoft-Graph-UWP-Connect-SDK wystąpił problem
w miejscu oznaczonym jako 08:

            //
            //----------------------------------------------------------------------------------------------------------------------------------------------------
            // 08- Skopiuj plik - Wykorzystuje jedną z StorageFile . CopyAsync metod, aby skopiować plik.
         //   StorageFolder picturesLibrary = await KnownFolders.GetFolderForUserAsync(null /* current user */, KnownFolderId.DocumentsLibrary);//.PicturesLibrary);
         //   await newFile.CopyAsync(picturesLibrary, desiredName + " - 002 - sample - Copy.txt", NameCollisionOption.ReplaceExisting);
            // 08- Skopiuj plik - Wykorzystuje jedną z StorageFile . CopyAsync metod, aby skopiować plik.
            //----------------------------------------------------------------------------------------------------------------------------------------------------
            //

generalnie jest obejście przeze mnie problemu polegającym na niemożności utworzenia pliku raportu bezpośrednio we wskazanej, dowolnej lokalizacji np. na pulpicie
i plik utworzony w systemowej jakiej przestrzeni projektu jest kopiowany do foldera Dokumenty lub Obrazy...
jako proteza jedynie abym miał łatwiejszy dostęp do takiego pliku - raportu bez potrzeby szukania go w ukrytym folderze:
np.: C:\Users\vbhgh\AppData\Local\Packages\022b68d9-0752-4bc9-85eb-0b9129f5c5bb_nyfwse2vvz7nc\LocalState...

i mam pytanie czy istnieje metoda jakaś która by pod UWP pozwoliła mi bezpośrednio utworzyć plik raportu w dowolnie wskazanej lokalizacji, ponieważ nie mogę jakoś znaleźć...

serdeczne podziękowanie za jakąś wskazówkę
Szymek

0

oczywiście o ten fragment mi chodzi by go czym innym może zastąpić:

           //
            //----------------------------------------------------------------------------------------------------------------------------------------------------
            // 08- Skopiuj plik - Wykorzystuje jedną z StorageFile . CopyAsync metod, aby skopiować plik.
            StorageFolder picturesLibrary = await KnownFolders.GetFolderForUserAsync(null /* current user */, KnownFolderId.DocumentsLibrary);//.PicturesLibrary);
            await newFile.CopyAsync(picturesLibrary, desiredName + " - 002 - sample - Copy.txt", NameCollisionOption.ReplaceExisting);
            // 08- Skopiuj plik - Wykorzystuje jedną z StorageFile . CopyAsync metod, aby skopiować plik.
            //----------------------------------------------------------------------------------------------------------------------------------------------------
            //
0

Ogólnie - nie możesz w UWP zapisać sobie pliku "gdziekolwiek". Bo nie.

Możesz użyć FileSavePicker i wtedy pojawia się okno "Zapisz plik" i wybrać samemu folder i plik i nadać mu nazwę i możesz sobie po nim pisać bez ograniczeń.

Przykład użycia:

FileSavePicker fsp = new FileSavePicker();
fsp.FileTypeChoices.Add("Plain Text", new List<string>() { ".txt" });
var file = await fsp.PickSaveFileAsync(); // tutaj w zmiennej file masz odwołanie do pliku z którym zrobisz wszystko

await FileIO.WriteTextAsync(file, TextBox1.Text);

Z kolei jeżeli chcesz pisać bez problemu po katalogu Documents to:

  • musisz dodać sobie Capability (ale trzeba to zrobić ręcznie: dodaj <uap:Capability Name="documentsLibrary" /> w sekcji Capabilities w pliku Package.appxmanifest - tylko trzeba na nim kliknąć prawym i wybrać Open With i wybrać XML Editor, bo inaczej otworzy się ten domyślny edytorek);
  • oraz musisz zdefiniować typ pliku, który obsługuje twoja aplikacja - na przykład do obsługi plików TXT trzeba w Package.appxmanifest w sekcji Application dodać:
<Extensions>
<uap:Extension Category="windows.fileTypeAssociation">
  <uap:FileTypeAssociation Name="textfiles">
	<uap:SupportedFileTypes>
	  <uap:FileType ContentType="text/plain">.txt</uap:FileType>
	</uap:SupportedFileTypes>
  </uap:FileTypeAssociation>
</uap:Extension>
</Extensions>

Tylko, że aplikacja z dostępem do Dokumentów może nie przejść certyfikacji.

1 użytkowników online, w tym zalogowanych: 0, gości: 1