我一直在使用一個基本上設計爲數字閃存卡的簡單程序。理想情況下,我希望程序是可移植的。我正在嘗試獲取當前目錄。我的設置是這樣的:獲取當前目錄
我有一個FileIO.cs方法讀取currentDir /數據。然後我有一個winform,它調用該方法並檢索文件夾列表的字符串[]數組。這兩種方法都是公共靜態的。然後我有一個單獨的按鈕來在窗體上創建控件。
問題: 我已清洗/重建所述溶液,並使用調試器被;該程序從C:\ Users \ user \ a \ b \ c \ solution \ bin \ debug運行。我爲驗證此數據而創建的控件(radioButton)告訴我'currentDir'是C:\ Users \ user,而不是程序當前目錄。
注: 我手動創建調試\數據和數據文件夾內的4個文件夾,所以我敢肯定他們的存在100%。不會引發警告或編譯或運行時錯誤。 Card_Base.GetGrades會自動在表單加載時成功調用。
我也確認發佈文件夾是空的並且未被使用。此外,我還有一個備份程序,當文件每次更改時都會上傳到備份中,並顯示一個圖標。所以我100%確定bin \ debug是這種情況下正確的工作文件夾。
也許什麼是最令人費解的是,我已經寫了使用相同的IDE在同一臺PC上的一個完全獨立的程序,它正確地檢索使用相同的設置路徑。
在FileIO.cs
//public static string pathPortable = System.IO.Directory.GetCurrentDirectory();
public static string pathPortable = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
static string[] grade1;
public static string[] GetGrade()
{
string fullPath = FileIO.pathPortable + @"\Data";
grade1 = Directory.GetDirectories(fullPath);
return grade1;
}
在Card_Base.cs
public static List<RadioButton> buttonGrade = new List<RadioButton>(10);
public static void GetGrades()
{
string[] grade2 = FileIO.GetGrade();
//Proper and accurate names of the folders I manually added
//C:\Users\user\a\b\c\solution\bin\debug\Data\K
//C:\Users\user\a\b\c\solution\bin\debug\Data\1
//C:\Users\user\a\b\c\solution\bin\debug\Data\2
//C:\Users\user\a\b\c\solution\bin\debug\Data\3
MessageBox.Show("" + grade2[0]); //Information (entire path) is accurate as of this line
int x = 5;
int y = 0;
for (int i = 0; i < grade2.Count(); i++)
{
y = i * 21;
Card_Base.buttonGrade.Add(new RadioButton());
Card_Base.buttonGrade[i].Text = grade2[i];
MessageBox.Show("" + buttonGrade[i].Text); //Proper entire path is shown here!
Card_Base.buttonGrade[i].Location = new System.Drawing.Point(x, y);
}
}
控制其的.text屬性其示出了C:\用戶\用戶,而不是賓\ Debug文件夾。
private void buttonTest_Click(object sender, EventArgs e)
{
MessageBox.Show("abc:" + buttonGrade[0].Text);
for (int i = 0; i < buttonGrade.Count(); i++)
{
panelGrade.Controls.Add(buttonGrade[i]);
}
MessageBox.Show("def:" + buttonGrade[0].Text); //Proper string path is displayed in the popup box here!
}
結果:??? 四形式面板上垂直排列單選按鈕,所有有文本閱讀「C:\用戶\用戶\」
UPDATE1: 文本也會出現稍微錯位,比RADIOBUTTON氣泡本身略高,很奇怪。但是,我已經回到編輯並確認panelGrade最初是空的。單擊/拖動不捕捉任何東西,並右鍵單擊面板不會在面板空間中顯示任何基礎對象。
將目標目錄修改爲其父級(高1級)後,每個messageBox檢查點顯示正在發送正確的字符串/路徑。當「test」按鈕被按下後,程序啓動時的可見radioButton是這種不尋常的文字/字符串出現在任何地方的唯一情況。前
配售消息框/後測試按鈕自身內的循環示出了控制(單選按鈕在buttonGrade [0])DOES包含正確的串/文本/路徑。因此,改變必須發生在buttonTest代碼完成執行後的某個時間點。
UPDATE2: 我剛開了一個全新的解決方案和複製/粘貼相關代碼消除任何多餘的。將所有的項目/控件命名爲相同的名稱。完全裸露的骨頭。完全相同的問題。
但是,當我將radioButtons更改爲TextBox時...程序顯示正確的信息。嗯。什麼???
更新3: 尋找通過MSDN radioButtons派生自buttonBase。我一眼看到的唯一相關事件就是textChanged事件。雖然它注意到,像radioButton這樣的派生類的文本屬性的方式會有所不同,但它無法精確地指定它具有的限制或限制。 Control.Text只是一個System.String,因此我看不出爲什麼radioButton將無法包含這些信息。我試着創建'test2'按鈕來改變'buttonGrade [0] .Text = FileIO.pathPortable;' 。奇怪的是,它並沒有改變文字。它也不會拋出錯誤。
啊哈!我注意到用戶之後的文件夾是我的谷歌驅動器,它是「谷歌驅動器」,並有一個空間。然後,我將垃圾程序複製到C:\並將其命名爲TrashMe2,並確保沒有包含空格的文件夾名稱。結果是「C:\ TrashMe2 \ bi」。然後我嘗試了「123456789」。結果是它顯示到第二秒。
radioButton沒有接收到不同的字符串,字符串/路徑/數據從未改變。它只是顯示了一個'不同的文件夾',因爲那個'通過運氣'是它顯示的可見字符的確切數量。因爲我以編程方式創建了radioButton,所以AutoSize沒有默認爲true。正確的字符串是radioButton的一部分,它不是全部可見的。
而出於安全原因(和一些幽默),我實際上打電話給我的用戶帳戶「用戶」。所以這不是我會看到C:\ Users \ JoeNomidBlow被切斷的場景。
我覺得......在這個特定的時刻很愚蠢。謝謝您的幫助!
您是否檢查單選按鈕文本是否未被其他控件佔用?在瀏覽器中單擊鼠標右鍵,然後檢查元素以查看實際呈現給單選按鈕的文本。 –
可以肯定的是,當你用'FileIO.pathPortable'替換'FileIO.pathPortable + @「\ Data」;'時會發生什麼? ? – Rob
@Rob - 我做了調整,程序仍然有相同的最終結果。沿途的消息框正確顯示新(較高位置)文件夾中的信息。在正在搜索的Debug文件夾內只有一個「Data」文件夾(正在運行主動調試的應用程序)。 – Branden