C# Fájlba írás probléma

C# Fájlba írás probléma
2019-11-17T18:50:49+01:00
2019-11-18T16:51:14+01:00
2022-10-15T21:16:40+02:00
Maqui
Sziasztok!

StreamWriter Sw = new StreamWriter("F:\Szamok.txt", append: true);

Sw.Write("Halihó!!!");

Sw.Close();

10 éve semmi bajom ezzel, most úgy látszik eljött az idő. Frissen telepített 2017-es Visual Studio. Semmi hibajelzés, lefut, nem ír semmit ha van ilyen fájl, nem hoz létre, ha nincs ilyen fájl. Nem "using" probléma, az eredmény ugyanaz. Végig olvastam ma szinte mindent erről, de semmi sem segített. 

Van ötletetek? 

üdv,
Mutasd a teljes hozzászólást!
Jól értelek, hogy VS nélkül is ugyanezt tapasztalod, ugye?

Bizony, úgy hangzik, mintha valami sandbox módban futtatnád a kódot, de a leírásod nem illik a Windows 10 beépített Sandbox módjára, és elképzelésem sincs, honnan jön az a "virtuális futás" üzenet.

Ez így nem programozási probléma. Te tudod, honnan vetted ezt a Windows 10-et, és hogyan konfiguráltad fel.

Vidd a kódot át egy szűz Windows 10-re egy tiszta Visual Studio-val és működni fog, ahogy kell!
Mutasd a teljes hozzászólást!

  • Még annyit, hogy ugyanonnan gyönyörűen olvas. Bár ezt gondolom sejtettétek. Valami új beállítás van?
    Mutasd a teljes hozzászólást!
  • Hát ez érdekes probléma.

    A kód ugyan nem a legelegánsabb, de gond nélkül működik (.NET 4.7.2 / .NET Core 3.0).

    Az az érdekes rész, hogy nem kapsz exception-t. Nem nyeled le mégis valahol, amire nem gondolsz?

    Ugye egy frissen készített, töküres console app-ban is próbáltad?

    Egyébként ilyen alap IO műveletekre célszerű a File.ReadAll..., File.WriteAll... ill. File.AppendAll... metódusokat használni. Ezek egyszerűbbek és korrektül implementálják a dispose pattern-t, ellentétben a te kódoddal.
    Mutasd a teljes hozzászólást!
  • Hűha! 

    Ez egyre érdekesebb. Kipróbáltam a kódodat, egyszerűen a path-t írtam át az "F:\Szamok"-ra. A képernyőn gyönyörűen megjelent minden, de a fájlomban az eredeti szöveg van továbbra is, amit kezdésnél beleírtam. 

    StreamWriter Sw = new StreamWriter("F:\Szamok.txt", true);

    Sw.Write("Halihó!!!");

    Sw.Close();

    string path = @"F:\Szamok.txt";

    // This text is added only once to the file.
    /* if (!File.Exists(path))
    {
    // Create a file to write to.
    string createText = "Hello and Welcome" + Environment.NewLine;
    File.WriteAllText(path, createText);
    }*/

    // This text is always added, making the file longer over time
    // if it is not deleted.
    string appendText = "This is extra text" + Environment.NewLine;
    File.AppendAllText(path, appendText);

    // Open the file to read from.
    string readText = File.ReadAllText(path);
    Console.WriteLine(readText);


    A képernyőn pedig a következő jelent meg: 

    Hello and Welcome
    Halihó!!! This is extra text.
    Halihó!!! This is extra text.
    Halihó!!! This is extra text.
    Halihó!!! This is extra text.
    Halihó!!! This is extra text.

    Press any key.....
    Mutasd a teljes hozzászólást!
  • Próbáltad a .NET verziót lejjebb vinni projekt indításakor? A másik ami kevésbé valószínűbb, de mi van akkor, ha írásvédett helyre próbálsz írni? Win 10 -nél tapasztaltam valamikor, hogy ha Desktopon belül nyitok egy projektet, ott gond nélkül működik, máshova meg ami C-n van, nem enged kézzel sem írni a mappákba. De lehet ez csak nálam ilyen sajátos jelenség volt, mindenesetre próbáld megcserélni a partíciót. Vagy ha VS -ben nem is történik semmi, akkor kézzel másold ki a már lefordult programot (a debug mappa tartalmát), és azt tedd át másik meghajtóra, más mappába. Bár ilyen hibáknál akkor jeleznie kellene a programnak.
    Mutasd a teljes hozzászólást!
  • Totál túlbonyolítod, és nem válaszolsz a kérdéseimre.

    Fogj egy új console app-ot és futtasd ezt:

    static void Main(string[] args) { string file = "text.txt"; // ha nem létezik a file, létrehozza, nem kell figyelni, létezik-e File.AppendAllText(file, "First"); File.AppendAllText(file, "Second"); string content = File.ReadAllText(file); Console.WriteLine(content); }
    Ez a helyi könyvtárban (Bin/Debug) létre fog hozni egy file-t text.txt néven, beleírja a cuccot, beolvassa azt és kiírja a képernyőre.

    Futtasd VS-ből, ill. futtasd közvetlenül egy konzolból, VS nélkül!

    Kérdések: létrejött-e a file, keletkezett-e exception, megjelent-e a tartalom.

    Írd ide az eredményét, mindkét esetben!

    Szerk.:

    Az előző hozzászólásra reagálva: nem számít a framework verzió. Ha írásvédett a hely vagy nincs jogosultság, akkor pedig exception-t fogsz kapni.

    A legvalószínűbb, hogy van valahol egy try/catch block, ahol lenyeled a hibát, ezért kérem, hogy új projectet készíts!
    Mutasd a teljes hozzászólást!
  • Lejjebb vittem 4.5.1-re. Semmi változás. Ugyanezzel C-re raktam a progit  és a text file-t is. Semmi változás. Ha nincs, akkor nem hoz létre, ha van, akkor nem változtat. Mindenesetre a képernyőn szépen kiírja a fájlból beolvasott dolgokat.

    Viszont a monitor bal alsó sarkában feljön egy kis ablak, hogy virtuális futás. Nem colt még Win10-em, de lehet, hogy már nem is sokáig lesz. :)
    Mutasd a teljes hozzászólást!
  • Nem hoz létre fájlt. Az előzők is új projektek voltak. Ugyanezt csinálja ez is. Csak itt ez jelenik meg:

    FirstSecondFirstSecondFirstSecondFirstSecond
    Press any key to continue . . .

    Nem keletkezik kivét és mindig egy-el több FirstSecond-ot ír ki, tehát valahol jegyzi, mintha fájl lenne. De láthatóan nem találom sehol. 

    MI a fene az a virtual kiírás amikor indítom a projektet a bal alsó sarokban? Ezzel még nem találkoztatok?
    Mutasd a teljes hozzászólást!
  • Jól értelek, hogy VS nélkül is ugyanezt tapasztalod, ugye?

    Bizony, úgy hangzik, mintha valami sandbox módban futtatnád a kódot, de a leírásod nem illik a Windows 10 beépített Sandbox módjára, és elképzelésem sincs, honnan jön az a "virtuális futás" üzenet.

    Ez így nem programozási probléma. Te tudod, honnan vetted ezt a Windows 10-et, és hogyan konfiguráltad fel.

    Vidd a kódot át egy szűz Windows 10-re egy tiszta Visual Studio-val és működni fog, ahogy kell!
    Mutasd a teljes hozzászólást!
  • Azzal, hogy a path-et átírtad, nem oldottál meg semmit. Csak az ellenőrzésnél használja arra, hogy megnézze, van-e a fájl. A StreamWriter még mindig nem azt használja, ahogy elnézem.

    Amúgy a StreamWriter esetében rossz az elérési útvonal. Nincs előtte a @, így a \ egy speciális karakterjelző és \s lesz belőle.

    Ha jól olvassa be a fájt, akkor érdekes, hogy hogyan is nincs benne a szöveg.

    Vírusirtód milyen? Mert erről a Virtual jelzőről én se tudok semmit.
    Mutasd a teljes hozzászólást!
  • Hali!

    Az a virtuális futtatás azt jelenti, hogy egy sandboxot hozott létre a programodnak. Ez viszont azt jelenti, hogy minden fájl módosítás, fájl létrehozást, stb csak addig él, ameddig a programod fut (és csak a sandboxban lehet megtalálni). Nekem jó pár éve volt Comodo vírusirtóm, az csinált ilyeneket, újabban már a Defender is tud ilyet (úgy 3 éve Linuxot használok, szal nem tudom mióta tudják).
    Amikor először futtatsz egy frissen telepített VS-ből valamit, akkor szokott rákérdezni, hogy mi legyen, ha azt mondtad, hogy futtassa virtuálisban, vagy csak simán OK-ot nyomtál (vagy Yes/Igen - t), akkor ameddig át nem állítod, már így marad.
    Meg kell keresned, hogy ki csinálja és átállítani, hogy a VS-ből indított programokat ne futtassa virtuálisban.
    Mutasd a teljes hozzászólást!
  • Szia!

    StreamWriter Sw = new StreamWriter("F:\Szamok.txt", append: true);

    Állításod szerint működik, lefut.

    Viszont szerintem már az elején el kellene akadnia, mert nem használsz "kukacot":)

    StreamWriter Sw = new StreamWriter(@"F:\Szamok.txt", append: true);

    Talán ez lehet a baja...
    Mutasd a teljes hozzászólást!
  • MI a fene az a virtual kiírás amikor indítom a projektet a bal alsó sarokban? Ezzel még nem találkoztatok?

    Bár nem tudom, mi ez, de ha programból megpróbálnád visszaolvasni a fájlt, valószínűleg ott lennének benne az adataid.

    Másik tipp: nézz körül a \Users\<Te>\AppData\Local\VirtualStore könyvtárban. Oda gyűjti a Windows azokat a fájlokat, amiket elégtelen jogosultságokkal próbál valaki írni. Bár a tény, hogy kapsz valamilyen virtualizé üzenetet azt sejteti, hogy nem sima fájlvirtualizációról van szó (mert az néma csendben történik), megnézni azért meg lehet.
    Mutasd a teljes hozzászólást!
  • Teljesen igazad van, hogy ez bizony nem programozási probléma. Egyszerre válaszolok itt mindenkinek:

    Én is arra gondolok, hogy a "fájl" csak addig létezik, amíg a program fut. A valós fájlomban semmiféle változást nem látok, ha abba szeretnék írni. A defender kikapcsolva, a comodo-ban pedig nincs bekapcsolva a virtuális futtatás. Ezért csak is a Visual Studio-ra gyanakodtam. Leszedtem és feltettem egy másikat. Gyönyörűen működik, ahogy eddig hozzászoktam. Nem kérdezett semmi virtualitást, amikor telepítettem. De ezt az előző sem tette, ezért nem is sejtettem.
        
    Elnézést kérek mindenkitől, rossz topicba írtam! Mindenesetre, köszönöm, hogy hozzászóltatok. Kezdeményezem a topic törlését.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd