我正在處理 C# 上的檔案,但我已經不知道如何繼續了。場景是這樣的:如果我同時上傳 3 個或更多同名檔案,我想處理它們并將它們的名稱從“myfile.pdf”更改為“myfile.pdf(1)/(2)/ (3)...”取決于我上傳的檔案數量。
這是我到目前為止所嘗試的,在這種情況下,這只適用于第二個檔案,因為當第三個檔案出現時,它會檢查是否有任何相同的檔案 - 是的,可以將其命名為“myfile.pdf(2 ) - 但它也存在,所以它會去另一個地方。
如何使用此命名約定在同一檔案夾中實作相同的三個檔案?
這是我迄今為止嘗試過的:
string FileName = "MyFile.pdf";
string path = @"C:\Project\MyPdfFiles\"
if (File.Exists(path))
{
int i = 1;
var FileExists = false;
while (FileExists==false)
{
if (FileExists == false)
{
FileName = FileName "(" i ")";
}
else
return;
i ;
}
}
而這段代碼的結果是:"MyFile.pdf", "MyFile.pdf(1)" 而第三個沒有在這里加載。我想我在回圈或 idk 中遺漏了一些東西:(。有人可以幫助我嗎?
我也試過這個:
if(File.Exists(path) || File.Exists(path "(") //因為當第二個檔案上傳時,它的名字將是SecondFile.pdf(1),所以這將回傳true并繼續運行,但是迭代仍然會“總是”從 0 開始,因為每次我上傳檔案時,我都必須重繪 程序。
uj5u.com熱心網友回復:
不要在 while 回圈中使用 return,最好在希望回圈停止時設定 'FileExists = true'。return 陳述句將退出您當前的方法。
我認為您的問題可以使用遞回輕松解決,如下所示(未經測驗):
public class Program
{
public string FileName { get; set; }
public Program() {
string fileName = "MyFile.pdf";
string path = @"C:\Project\MyPdfFiles\";
FileName = CheckFileName(path, fileName);
}
public string CheckFileName(string path, string fileName, int iteration = 0) {
if (File.Exists($"{path}{fileName}")) {
iteration ;
CheckFileName(path, $"{fileName}({iteration})", iteration);
}
return fileName;
}
}
它的作用是:itCheckFileName方法將不斷呼叫自身,直到找到尚不存在的名稱。
uj5u.com熱心網友回復:
這應該可以完成作業。
public class Program
{
public static string GetUnusedFilePath(string directorypath, string filename, string ext)
{
string fullPath = $"{directorypath}{filename}{ext}";
int inc = 0;
// check until you have a filepath that doesn't exist
while (File.Exists(fullPath))
{
fullPath = $"{directorypath}{filename}{inc}{ext}";
inc ;
}
return fullPath;
}
public static void UploadFile(string filepath)
{
using (FileStream fs = File.Create(filepath))
{
// Add some text to file
Byte[] title = new UTF8Encoding(true).GetBytes("New Text File");
fs.Write(title, 0, title.Length);
}
}
public static void Main()
{
string[] filestoUpload = { "file", "file", "file", "anotherfile", "anotherfile", "anotherfile" };
string directorypath = @"D:\temp\";
string ext = ".txt";
foreach(var file in filestoUpload)
{
var filePath = GetUnusedFilePath(directorypath, file, ext);
UploadFile(filePath);
}
}
}
uj5u.com熱心網友回復:
我通過使用以下代碼創建具有特殊名稱的新檔案夾來解決此問題:
DirectoryInfo hdDirectoryInWhichToSearch = new DirectoryInfo(FileDirectory);
FileSystemInfo[] filesAndDirs = hdDirectoryInWhichToSearch.GetFileSystemInfos("*" FullFileName "*");
int i = filesAndDirs.Length;
if (i>1)
{
FileName = Filename "(" i ")";
}
所以它的作用是計算我們在那個檔案夾中有多少個同名的檔案,所以我必須檢查我們是否有超過 1 個檔案,然后將其名稱更改為 file(1)。
感謝所有試圖幫助我的人,非常感謝。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/369956.html
上一篇:如何在argo作業流程中的地圖中傳遞多行json字串
下一篇:根據前一天的值計算引數
