The process cannot access the file FILENAME

Συζητήσεις για τις γλώσσες του dot Net και για του Visual Studio της Microsoft

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
loxy
Δημοσιεύσεις: 208
Εγγραφή: 17 Ιούλ 2007 01:18

The process cannot access the file FILENAME

Δημοσίευση από loxy » 13 Οκτ 2011 20:06

Kalispera se olous meta apo kairo kai arketa km makria.

Prwti prospatheia enasxolisis me C# kai meta apo arketes wres (kai meres... ) pou exw kollisei, exw ena ListBox (to opoio gemizei apo text file), kai 6 pedia,sta opoia emfanizw ta stoixeia apo kathe Item tou ListBox.

To problima einai oti otan paw na grapsw sto text file me StreamWriter, mou emfanizei to minima toy titlou,
kai grafei ta dedomena se ena temp file sto Debug/.

Episis, otan svinw to full pathname tou arxeiou mou, den diavazei tipota.
Kapoia idea?

P.S. : Na simeiwsw oti sto Form.load() diavazw apo to text file kai emfanizw sto ListBox me StreamReader ton opoio kleinw...

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

The process cannot access the file FILENAME

Δημοσίευση από dva_dev » 13 Οκτ 2011 21:18

Just a wild guess
(αρχίζω να το συνηθίζω αυτό τώρα τελευταία)

Βγάλε τα εισαγωγικά από το "FILENAME"

και πες μας αν έπαιξε ή όχι.

Άβαταρ μέλους
loxy
Δημοσιεύσεις: 208
Εγγραφή: 17 Ιούλ 2007 01:18

The process cannot access the file FILENAME

Δημοσίευση από loxy » 13 Οκτ 2011 21:55

Dystyxws oxi, kateytheian sfalma o compiler.

Άβαταρ μέλους
_tasos
Δημοσιεύσεις: 116
Εγγραφή: 03 Μάιος 2007 15:06
Επικοινωνία:

The process cannot access the file FILENAME

Δημοσίευση από _tasos » 14 Οκτ 2011 00:58

Μπορείς να ποστάρεις λίγο κώδικα;

Άβαταρ μέλους
loxy
Δημοσιεύσεις: 208
Εγγραφή: 17 Ιούλ 2007 01:18

The process cannot access the file FILENAME

Δημοσίευση από loxy » 14 Οκτ 2011 01:22

Fysika. Oriste...

Ayto einai to Add Item button mou:

Κώδικας: Επιλογή όλων

private void addItem_Click(object sender, EventArgs e)
        {
            
            StreamWriter writer = new StreamWriter("stockdb.txt");
           
            Item newItem =new Item ();
            
            
                        newItem.iCode = int.Parse(iCodeTxt.Text);
                        newItem.iName = iNameTxt.Text;
                        newItem.sName = sNameTxt.Text;
                        newItem.uCost = double.Parse(uCostTxt.Text);
                        newItem.noRequired = int.Parse(nReqTxt.Text);
                        newItem.sLevel = int.Parse(sLevelTxt.Text);


                        double totalAmount = newItem.uCost * newItem.noRequired;

                        if &#40;double.Parse&#40;BankTxt.Text&#41; < totalAmount&#41;
                        &#123;
                            MessageBox.Show&#40;"Your balance is not enough for this order !"&#41;;
                        &#125;
                        else
                        &#123;
                            if &#40;newItem.noRequired < ++newItem.sLevel&#41;
                            &#123;
                                MessageBox.Show&#40;"You are going to overcome your required Number..."&#41;;
                            &#125;
                            items.Add&#40;newItem&#41;;
                            listBox1.DataSource = items;

                            //refresh the listbox, to see the new item  
                            //   listBox1.Refresh&#40;&#41;;

                            foreach &#40;object obj in listBox1.Items&#41;
                            &#123;
                                writer.WriteLine&#40;obj&#41;;

                            &#125;

                           MessageBox.Show&#40;"Item has been recorded successfully !"&#41;;
                            writer.Close&#40;&#41;;

                            //clear all fields if item added correctly and display a message
                            iCodeTxt.Clear&#40;&#41;;
                            iNameTxt.Clear&#40;&#41;;
                            sNameTxt.Clear&#40;&#41;;
                            uCostTxt.Clear&#40;&#41;;
                            nReqTxt.Clear&#40;&#41;;
                            sLevelTxt.Clear&#40;&#41;;

                        &#125;         
                              
        &#125;






Alla ypopsiazomai oti to problima xekinaei apo ti Form Load , kai mipws den tin kleinw swsta...

Κώδικας: Επιλογή όλων

 private void Form1_Load&#40;object sender, EventArgs e&#41;
        &#123;
            // Read the file and display it line by line.
            string line;
            StreamReader reader = new StreamReader&#40;"stockdb.txt"&#41;;
           
           while &#40;&#40;line = reader.ReadLine&#40;&#41; &#41; != null&#41;
            &#123;
                                         
                        string&#91;&#93; itemData = line.Split&#40;&#40;','&#41;&#41;;
                        Item item = new Item&#40;&#41;;

                            item.iCode = int.Parse&#40;itemData&#91;0&#93;&#41;;
                            item.iName = itemData&#91;1&#93;;
                            item.sName = itemData&#91;2&#93;;
                            item.uCost = double.Parse&#40;itemData&#91;3&#93;&#41;;
                            item.noRequired = int.Parse&#40;itemData&#91;4&#93;&#41;;
                            item.sLevel = int.Parse&#40;itemData&#91;5&#93;&#41;;

                            items.Add&#40;item&#41;;
                           listBox1.Items.Add&#40;item&#41;;
                          
                 &#125;
                        // listBox1.Datasource = null;
                        listBox1.DataSource = items;
                        reader.Close&#40;&#41;;                  
                        
          &#125;

Άβαταρ μέλους
_tasos
Δημοσιεύσεις: 116
Εγγραφή: 03 Μάιος 2007 15:06
Επικοινωνία:

The process cannot access the file FILENAME

Δημοσίευση από _tasos » 14 Οκτ 2011 01:34

Η Form_Load μου φαίνεται σωστή, μήπως το πρόβλημα συμβαίνει εδώ:

Κώδικας: Επιλογή όλων

if &#40;double.Parse&#40;BankTxt.Text&#41; < totalAmount&#41;
&#123;
    MessageBox.Show&#40;"Your balance is not enough for this order !"&#41;;
&#125; 
Αν μπει εδώ μέσα, τότε δεν κλείνεις τον writer και στο επόμενο addItem_Click ίσως χτυπήσει.

Άβαταρ μέλους
loxy
Δημοσιεύσεις: 208
Εγγραφή: 17 Ιούλ 2007 01:18

The process cannot access the file FILENAME

Δημοσίευση από loxy » 14 Οκτ 2011 01:37

Vazwntas to sygkekrimeno kommati se sxolia , den ginetai kati pali.
Na prosthesw oti to item mpainei kanonika sto listbox...

Άβαταρ μέλους
_tasos
Δημοσιεύσεις: 116
Εγγραφή: 03 Μάιος 2007 15:06
Επικοινωνία:

The process cannot access the file FILENAME

Δημοσίευση από _tasos » 14 Οκτ 2011 01:43

Σου χτυπάει με την πρώτη εκτέλεση ή κάποια επόμενη φορά;

Δοκίμασε να τρέξεις βήμα βήμα με τον debugger, μήπως έτσι καταλάβεις ποιο σημείο του κώδικα δημιουργεί το πρόβλημα.

Αν δεν βρεις άκρη, κάνε copy paste όλο το μήνυμα λάθους, μαζί με το stack trace.

Άβαταρ μέλους
loxy
Δημοσιεύσεις: 208
Εγγραφή: 17 Ιούλ 2007 01:18

The process cannot access the file FILENAME

Δημοσίευση από loxy » 14 Οκτ 2011 01:55

Den mporesa na katalavw kati... To error vgainei me tin mia. Epipleon, evala kai to full path stous StreamReader/Writer.

Κώδικας: Επιλογή όλων

System.IO.IOException was unhandled
  Message=The process cannot access the file 'C&#58;\Users\Teo\My Documents\Visual Studio 2010\Projects\MACS1\MACS1\stockdb.txt' because it is being used by another process.
  Source=mscorlib
  StackTrace&#58;
       at System.IO.__Error.WinIOError&#40;Int32 errorCode, String maybeFullPath&#41;
       at System.IO.FileStream.Init&#40;String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath&#41;
       at System.IO.FileStream..ctor&#40;String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options&#41;
       at System.IO.StreamWriter.CreateFile&#40;String path, Boolean append&#41;
       at System.IO.StreamWriter..ctor&#40;String path, Boolean append, Encoding encoding, Int32 bufferSize&#41;
       at System.IO.StreamWriter..ctor&#40;String path&#41;
       at MACS.Form1.addItem_Click&#40;Object sender, EventArgs e&#41; in C&#58;\Users\Teo\documents\visual studio 2010\Projects\MACS1\MACS1\Form1.cs&#58;line 107
       at System.Windows.Forms.Control.OnClick&#40;EventArgs e&#41;
       at System.Windows.Forms.Button.OnClick&#40;EventArgs e&#41;
       at System.Windows.Forms.Button.OnMouseUp&#40;MouseEventArgs mevent&#41;
       at System.Windows.Forms.Control.WmMouseUp&#40;Message& m, MouseButtons button, Int32 clicks&#41;
       at System.Windows.Forms.Control.WndProc&#40;Message& m&#41;
       at System.Windows.Forms.ButtonBase.WndProc&#40;Message& m&#41;
       at System.Windows.Forms.Button.WndProc&#40;Message& m&#41;
       at System.Windows.Forms.Control.ControlNativeWindow.OnMessage&#40;Message& m&#41;
       at System.Windows.Forms.Control.ControlNativeWindow.WndProc&#40;Message& m&#41;
       at System.Windows.Forms.NativeWindow.DebuggableCallback&#40;IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam&#41;
       at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW&#40;MSG& msg&#41;
       at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop&#40;IntPtr dwComponentID, Int32 reason, Int32 pvLoopData&#41;
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner&#40;Int32 reason, ApplicationContext context&#41;
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoop&#40;Int32 reason, ApplicationContext context&#41;
       at System.Windows.Forms.Application.Run&#40;Form mainForm&#41;
       at MACS.Program.Main&#40;&#41; in C&#58;\Users\Teo\documents\visual studio 2010\Projects\MACS1\MACS1\Program.cs&#58;line 19
       at System.AppDomain._nExecuteAssembly&#40;RuntimeAssembly assembly, String&#91;&#93; args&#41;
       at System.AppDomain.ExecuteAssembly&#40;String assemblyFile, Evidence assemblySecurity, String&#91;&#93; args&#41;
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly&#40;&#41;
       at System.Threading.ThreadHelper.ThreadStart_Context&#40;Object state&#41;
       at System.Threading.ExecutionContext.Run&#40;ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx&#41;
       at System.Threading.ExecutionContext.Run&#40;ExecutionContext executionContext, ContextCallback callback, Object state&#41;
       at System.Threading.ThreadHelper.ThreadStart&#40;&#41;
  InnerException&#58; 

  InnerException&#58; 

Κώδικας: Επιλογή όλων

>	MACS1.exe!MACS.Form1.addItem_Click&#40;object sender, System.EventArgs e&#41; Line 107	C#
 	&#91;External Code&#93;	
 	MACS1.exe!MACS.Program.Main&#40;&#41; Line 19 + 0x1d bytes	C#
 	&#91;External Code&#93;	

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

The process cannot access the file FILENAME

Δημοσίευση από dva_dev » 14 Οκτ 2011 03:51

Για δοκίμασε στο τέλος της Form1_Load να βάλεις και
reader.Dispose();

αντίστοιχα και για τον writer όπου τον χρησιμοποιείς.

Άβαταρ μέλους
loxy
Δημοσιεύσεις: 208
Εγγραφή: 17 Ιούλ 2007 01:18

The process cannot access the file FILENAME

Δημοσίευση από loxy » 14 Οκτ 2011 03:59

Tipota kai me ayto.
Den mporw na to katalavw...

Άβαταρ μέλους
_tasos
Δημοσιεύσεις: 116
Εγγραφή: 03 Μάιος 2007 15:06
Επικοινωνία:

The process cannot access the file FILENAME

Δημοσίευση από _tasos » 14 Οκτ 2011 05:34

Δες λίγο εδώ http://msdn.microsoft.com/en-us/library ... dline.aspx, έχει ένα sample κώδικα με StreamReader και StreamWriter. Χρησιμοποιεί την εντολή using. Δοκίμασε να χρησιμοποιήσεις κ εσύ τη using. Έτσι, θα είσαι σίγουρος πως στο τέλος της using το StreamReader και StreamWriter object γίνεται dispose και δεν μπλοκάρουν το αρχείο.

Κώδικας: Επιλογή όλων

using &#40;StreamWriter sw = new StreamWriter&#40;path&#41;&#41; 
&#123;
  sw.WriteLine&#40;"This"&#41;;
  sw.WriteLine&#40;"is some text"&#41;;
  sw.WriteLine&#40;"to test"&#41;;
  sw.WriteLine&#40;"Reading"&#41;;
&#125;

using &#40;StreamReader sr = new StreamReader&#40;path&#41;&#41; 
&#123;
  while &#40;sr.Peek&#40;&#41; >= 0&#41; 
  &#123;
    Console.WriteLine&#40;sr.ReadLine&#40;&#41;&#41;;
  &#125;
&#125;

Άβαταρ μέλους
loxy
Δημοσιεύσεις: 208
Εγγραφή: 17 Ιούλ 2007 01:18

The process cannot access the file FILENAME

Δημοσίευση από loxy » 14 Οκτ 2011 12:22

Oute me tin using,mporw na kanw kati.

Allagi planwn mallon, giati kai alloi symfoitites mou kollisan sto idio simeio,
kai strafikan pros OpenFileDialog.

Eyxaristw gia ti voitheia kai to xrono sas. :wink:

Άβαταρ μέλους
_tasos
Δημοσιεύσεις: 116
Εγγραφή: 03 Μάιος 2007 15:06
Επικοινωνία:

The process cannot access the file FILENAME

Δημοσίευση από _tasos » 14 Οκτ 2011 18:13

Η OpenFileDialog πως θα βοηθήσει την κατάσταση; Όπως μας έχεις δείξει τον κώδικα, δεν θα έπρεπε να υπάρχει πρόβλημα.

Μήπως στον κώδικα σου έχεις και άλλα σημεία που διαβάζουν / γράφουν στο αρχείο;

Άβαταρ μέλους
loxy
Δημοσιεύσεις: 208
Εγγραφή: 17 Ιούλ 2007 01:18

The process cannot access the file FILENAME

Δημοσίευση από loxy » 14 Οκτ 2011 18:58

Lew na dokimasw k enan allo tropo, mipws kai katalavw kalyter kati sxetika me to sfalma.

Ebala ena breakpoint kai me Step Over, prospathw na dw tin poreia tou mesa sto programma.

Mexri twra ta eisagw swsta alla exw kapoia "Input Format Exceptions", pros to paron ,
ta opoia prospathw na lysw.

Idwmen.


*Sorry,gia ta keimena mou se greeklish

Απάντηση

Επιστροφή στο “dot Net και Visual Studio”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες