Utworzenie pliku tekstowego

0

WPF mam aplikację która powinna zapisaywac plik.
Dodałem wyjątek i opcję [sprawdzam], ale wszystko wygląda OK (file exists)
Problem że w katalogu nie widzę fizycznie pliku - jakieś pomysły?

using System.Windows;
using System.IO;

namespace Save_Me
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            string pathName = @"F:/Save/BrozneStar.txt";

            Save_To_File(pathName);
        }

        public static void Save_To_File(string pathName)
        {
            string file_path = pathName;

            try
            {
                using (var writer = new StreamWriter(file_path))
                {

                    writer.WriteLine("test");

                }
                
                string messageBoxText = "Saving completed";
                MessageBoxResult result;

                result = MessageBox.Show(messageBoxText);
            }
            catch (IOException)
            {}

            //test

            if (File.Exists(file_path))
            {
                MessageBoxResult result;
                result = MessageBox.Show("file exists");
            }
            else
            {
                MessageBoxResult result;
                result = MessageBox.Show("file DOES NOT exists");
            }

        }
    }
}
3
Antar napisał(a):

WPF mam aplikację która powinna zapisaywac plik.
Dodałem wyjątek i opcję [sprawdzam], ale wszystko wygląda OK (file exists)
Problem że w katalogu nie widzę fizycznie pliku - jakieś pomysły?


            catch (IOException)
            {}

Masz jakieś przemyślenia w tej sprawie ?

0

            catch (IOException)
            {}

Masz jakieś przemyślenia w tej sprawie ?

W zasadzie instrukcja try-catch nie zwraca błędu,
wyskakuje msg "Saving completed" jako ostatnia z bloku [try], więc na tej podstawie domniemuję że [catch] się nie wykonuje

zmiana catch (IOException){} na catch{} też nie zwraca błędu przy próbie zapisu pliku,
usunięcie całego bloku try/catch też nie , więc nie jestem w stanie rozpoznać problemu

BTW.
Nie mam wykształcenia kierunkowego, C# to moje hobby w chwilach wolnych.
Niektórzy wolą krzyżówki, ja wolę C#.
To tak dla wyjaśnienia potencjalnych dziur we wiedzy.

2

Zrób tak to będziesz wiedział co nie działa.

catch (Exception ex) 
{
  MessageBox.Show(ex.Message);
}
0

Poddaję się - nie wiem. Dołożyłem usying System;
alle nie wyrzuca dodatkowgo komunikatu o błedzie podczas wykonywania.
A pliku dalej nie ma.

0

@Antar:

jeśli zawiodą wszystkie sposoby (w oryginale było: przeczytać instrukcję) użyć debugera

0

No to moim zdaniem nie zostaje nic innego jak w ścieżce zmienić / na \.

 string pathName = @"F:\Save\BrozneStar.txt";
0

A katalog F:\Save\ istnieje?

2

Czyli kod zapisuje plik i mówi że plik istnieje ale go nie ma?
Coś czuję że źle sprawdzasz, pokaż screena z eksploratora plików że go tam nie ma.

  1. Włącz pokazywanie ukrytych plików.
  2. Nie masz nigdzie w kodzie później usuwania tego pliku?
  3. Może masz tam dużo plików i szukasz "Bronze" zamiast "Brozne"
1

Odtworzyłem to i wszystko działa:
screenshot-20230418013508.png

using System.Diagnostics;

string pathName = @"C:\Save\BrozneStar.txt";

Save_To_File(pathName);

void Save_To_File(string pathName)
{
    string file_path = pathName;

    try
    {
        if (!File.Exists(pathName))
            throw new Exception($"File {pathName} not exist");

        using (var writer = new StreamWriter(file_path))
        {
            writer.WriteLine("test");
        }
        Debug.WriteLine(file_path);
    }
    catch (Exception e)
    { 
        Debug.WriteLine($"Exception thrown: {e.Message}");
    }
}

Debug output:
C:\Save\BrozneStar.txt
screenshot-20230418013642.png

0

@gswidwa1:

Czyli kawał bicia piany, bo OP się wydawało
(stary dowcip studenci na medycynie: pan zdał, pani się zdawało)

0

Nie wiem co mam powiedzieć.
Eksplorator plików mi nie pokazuje obecnośc pliku, pliki txt ani zawartość katalogu też nie są ukryte.

Ale wniosek z tego płynie że to nie problem z kodem tylko systemowy. Bardzo dziękuję wszystkim za pomoc.

0

Czy przekopiowales mój kod i sprawdziłes wyjście?

0

Do celów diagnostycznych: VS Community 2019, ver 16.11.26
odpalam z poziomu kosoli przy niewspieranym już framework 5.0

dodałem tylko Console.WriteLine()

pliku nie widzęimage

1

nie uzywaj sciezek typu /katalog/katalog2 bo to jest niescisle, tzn zalezne od srodowiska, uzywaj Path.Combine(katalog1,katalog2)

0

@heyyou: Oto realizacja tego. Przy samodzielnym tworzeniu krótkiego ciągu Path.Combine tylko zaciemniłoby kod

public static string Combine(string path1, string path2)
{
    if (path1 == null || path2 == null)
    {
        throw new ArgumentNullException((path1 == null) ? "path1" : "path2");
    }
    Path.CheckInvalidPathChars(path1, false);
    Path.CheckInvalidPathChars(path2, false);
    return Path.CombineNoChecks(path1, path2);
}

private static string CombineNoChecks(string path1, string path2)
{
    if (path2.Length == 0)
    {
        return path1;
    }
    if (path1.Length == 0)
    {
        return path2;
    }
    if (Path.IsPathRooted(path2))
    {
        return path2;
    }
    char c = path1[path1.Length - 1];
    if (c != Path.DirectorySeparatorChar && c != Path.AltDirectorySeparatorChar && c != Path.VolumeSeparatorChar)
    {
        return path1 + Path.DirectorySeparatorChar + path2;
    }
    return path1 + path2;
}
0
gswidwa1 napisał(a):

@heyyou: Oto realizacja tego. Przy samodzielnym tworzeniu krótkiego ciągu Path.Combine tylko zaciemniłoby kod

public static string Combine(string path1, string path2)
{
    if (path1 == null || path2 == null)
    {
        throw new ArgumentNullException((path1 == null) ? "path1" : "path2");
    }
    Path.CheckInvalidPathChars(path1, false);
    Path.CheckInvalidPathChars(path2, false);
    return Path.CombineNoChecks(path1, path2);
}

private static string CombineNoChecks(string path1, string path2)
{
    if (path2.Length == 0)
    {
        return path1;
    }
    if (path1.Length == 0)
    {
        return path2;
    }
    if (Path.IsPathRooted(path2))
    {
        return path2;
    }
    char c = path1[path1.Length - 1];
    if (c != Path.DirectorySeparatorChar && c != Path.AltDirectorySeparatorChar && c != Path.VolumeSeparatorChar)
    {
        return path1 + Path.DirectorySeparatorChar + path2;
    }
    return path1 + path2;
}

Ten kod jest bardzo słaby.

Powinieneś użyć Path.Combine(),tak jak Ci proponowano.

2

Ogólnie, jeżeli są takie sytuacje, że aplikacja twierdzi, że zapisała plik (i może go odczytać), a Eksplorator nie pokazuje tego pliku to pewnie aplikacja wpadła w problem z uprawnieniami, a Windows zrobił "redirection", aby się nie wykrzaczała.

Sprawdź folder %LOCALAPPDATA%\VirtualStore.

https://answers.microsoft.com/en-us/windows/forum/all/please-explain-virtualstore-for-non-experts/d8912f80-b275-48d7-9ff3-9e9878954227

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